Конструкторы класса CakePHP - PullRequest
2 голосов
/ 13 января 2011

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

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

new Test('Hello World');

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 14 января 2011

С компонентами, где вы на самом деле пишете new TestComponent($args)?
Вы не Вы просто настраиваете Cake на использование Компонента, и 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.

2 голосов
/ 13 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...