Парень, именуемый olle в IRC-канале однажды сказал: Компонент это маленький общий «контроллер». Мы решили что это отличное определение. Главная цель – это возможность переиспользования. Компоненты — это то же самое для контроллеров, что и хелперы для отображений. Главное отличие лишь в том, что компоненты внедряются в рабочий код, а хелперы в представляемый код. Это отличие очень важно, чаще всего начинающих бейкеров, пытающихся, добиться возможности переиспользования сбивает с толку: Я пытаюсь сделать X, это должно быть компонентом или хелпером?! Ну, ответ очень прост, что делает X? Это рабочий код или код представления, может быть оба? Если это рабочий код, значит это компонент. Если это код представления, значит хелпер. Если оба, тогда.. ну это тогда оба и компонент, и хелпер. Примером последнего случая будет система аутентификации. Вам нужно будет входить, выходить, разделять доступ, и тестировать привилегии пользователей (действия: edit, add, del.. или url), это рабочий код, так что эта система должна быть компонентом. Но также вы хотите добавить какое-то содержимое в главное меню, когда пользователь вошел, а это уже код представления.
Разрешите нам предположить, что вы создали 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(); ?>
Чтобы использовать ваши модели внутри вашего компонента, вы можете создать привязку, вроде этой:
<? $foo =& new Foo(); ?>
<? var $components = array('Session'); ?>
Также загляните в snippet archive чтобы посмотреть на компоненты других пользователей.