
Jedną z większych bolączek w frameworku CakePHP (a przynajmniej w wersjach 1.) jest ładowanie komponentów. Skoro to czytasz, pewnie wiesz, że komponenty muszą być dołączane globalnie do całego kontrolera, nawet gdy są używane tylko w pojedynczej akcji. Na szczęście można to łatwo "obejść". Wystarczy w pliku app_controller.php umieścić funkcję:
function _loadComponent($componentName, $config = array()) {
App::import('Component', $componentName);
$componentFullName = $componentName.'Component';
$component = new $componentFullName($config);
if (method_exists($component, 'initialize')) {
$component->initialize($this);
}
if (method_exists($component, 'startup')) {
$component->startup($this);
}
$this->{$componentName} = $component;
}
i używać jej w dowolnym kontrolerze (i w dowolnej akcji) do ładowania wybranych komponentów, np.:
$this->_loadComponent('Email');
$this->_loadComponent('Car.Engine');
$this->_loadComponent(array('CustomComponent', 'Data' => array('x' => 'y')));
