CakePHP: Manual11/Components

Компоненты

Представление

Компоненты используются для помощи контроллерам в особых ситуациях. В отличии от центральной библиотеки Cake, особая функциональность может быть превращена в компоненты.

Парень, именуемый olle в IRC-канале однажды сказал: Компонент это маленький общий «контроллер». Мы решили что это отличное определение. Главная цель – это возможность переиспользования. Компоненты — это то же самое для контроллеров, что и хелперы для отображений. Главное отличие лишь в том, что компоненты внедряются в рабочий код, а хелперы в представляемый код. Это отличие очень важно, чаще всего начинающих бейкеров, пытающихся, добиться возможности переиспользования сбивает с толку: Я пытаюсь сделать X, это должно быть компонентом или хелпером?! Ну, ответ очень прост, что делает X? Это рабочий код или код представления, может быть оба? Если это рабочий код, значит это компонент. Если это код представления, значит хелпер. Если оба, тогда.. ну это тогда оба и компонент, и хелпер. Примером последнего случая будет система аутентификации. Вам нужно будет входить, выходить, разделять доступ, и тестировать привилегии пользователей (действия: edit, add, del.. или url), это рабочий код, так что эта система должна быть компонентом. Но также вы хотите добавить какое-то содержимое в главное меню, когда пользователь вошел, а это уже код представления.

Создание собственного компонента

Чтобы создать компонент добавьте файл в директорию app/controllers/components/.

Разрешите нам предположить, что вы создали foo.php. Внутри файла вам нужно определить класс, который будет соответствовать имени файла (добавление слова 'Component' к имени файла). Так что в вашем случае вы создадите следующее содержание:

Простой компонент

<?

class FooComponent extends Object

{

    var $someVar null;

    var $controller true;

 

    function startup(&$controller)

    {

        // Этот метод ссылается на контроллер, который его загружает.

        // Выполните инициализацию контроллера здесь.

    }

 

    function doFoo()

    {

        $this->someVar 'foo';

    }

}

?>

Теперь, чтобы воспользоваться своим компонентом, вам нужно добавить следующий код в определение вашего котроллера:

<? var $components = array('Foo'); ?>

Внутри этого котроллера вы теперь можете использовать:

<? $this->Foo->doFoo(); ?>

Компонент получает доступ к контроллеру, который его загрузил через startup() метод, показаный выше. Этот метод вызывается сразу после Controller::beforeFilter(). Этот метод позволяет вам установить свойства компонента в beforeFilter, который компонент запустит при своем старте.

Чтобы использовать ваши модели внутри вашего компонента, вы можете создать привязку, вроде этой:

<? $foo =& new Foo(); ?>

Вы также можете использовать другие компоненты внутри своего компонента. Вам просто нужно объявить в своем компоненте, какие компоненты вы хотите использовать. В примере ниже, это компонент сессий.

<? var $components = array('Session'); ?>

Публикация своего компонента

Если вы думаете, что ваш компонент может быть полезен другим, добавьте его в CakeForge. Компонент который будет все больше и больше полезен обществу может однажды быть включен в основной дистрибутив CakePHP.

Также загляните в snippet archive чтобы посмотреть на компоненты других пользователей.