2011-01-13 3 views
2

В обычном PHP вы можете сделать что-то вроде этого:CakePHP Конструкторы класса

Class Test { 
    function __construct($var) { 
     echo $var; exit; 
    } 
} 

new Test('Hello World'); 

Таким образом, вы можете передать переменную прямо в конструкторе. Это, похоже, не работает в cakePHP, хотя переменные не передаются ему. Единственный способ IV удалось сделать это сделать следующее:

(класс компонента)

Class TestComponent extends Object { 
    function construct($var) { 
     echo $var; exit; 
    } 
} 

(контроллер)

new $this->Test->construct('Hello World'); 

Есть ли лучший способ сделать это больше как первая без вызова имени функции напрямую?

+0

Кажется, typo 'construct ($ var)' missing '__', изменить на' __construct ($ var) ' – Ish

ответ

2

Это связано с тем, что когда вы включаете компонент в контроллер с переменными $ components, это уже делает экземпляр класса TestComponent и вы не создаете экземпляр самостоятельно.

Но ведь CakePHP - это php, вы всегда можете создать класс и включить его в контроллер и использовать конструктор.

4

С компонентами, где вы на самом деле пишете new TestComponent($args)?
У вас нет. Вы просто настраиваете Cake для использования Компонента, и Cake создаст его для вас.
Вы никогда не вызываете конструктора самостоятельно.

торт способ передачи параметров в компонент с помощью метода initialize:

class TestComponent extends Object { 
    public function initialize(&$controller, $settings = array()) { 
     // use $settings 
    } 
} 

class MyController extends AppController { 
    public $components = array('Test' => array(/* your settings */)); 
} 

См http://book.cakephp.org/view/996/Creating-Components.

Смежные вопросы