Blog

Our knowledge and experience - all for you, here, on our blog

Ładowanie komponentów ''w locie''.

Author: Kreator, category CakePHP, 01-10-2011 (last update: 01-10-2011) For begginers

Ładowanie komponentów ''w locie''.

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')));