Инициализировать модель в Zend Framework - PullRequest
2 голосов
/ 09 мая 2011

Согласно этому сообщению в блоге должна быть возможность иметь метод init () в модели. Как это:

class MyModel
{
    public function init()
    {
        // prepare something
    }   

... 
}

Это не работает для меня. Кто-нибудь знает, должен ли я где-то установить параметр (например, в файле конфигурации) или это больше невозможно в моей версии Zend FW (1.11.4)? Я проверил с помощью error_log ('нечто') в методе init, и он вообще не вызывается.

UPDATE: Я немного расширил решение Адама:

public function __construct() {
    if (get_parent_class($this) != false) {
        parent::__construct();
    }
    if(method_exists($this, 'init')) {
        $this->init();
    }
}

Таким образом, его можно поместить в базовый класс, а затем расширить. На всякий случай, если кому-то понадобится то же решение позже.

Ответы [ 3 ]

4 голосов
/ 09 мая 2011

Этот пост очень вводит в заблуждение.Если классы модели в приложении расширяются на Zend_Db_Table или Zend_Db_Table_Row, что не так в примерах поста, но подразумевается из текста, тогда да, вы можете добавить метод init (), который будет вызываться автоматически.Чтобы это работало в вашем приложении, вам необходимо вызывать метод из того, что создает ваши модели, или из конструктора базового класса.

2 голосов
/ 10 мая 2011

у вас есть такая проблема, потому что у класса php нет метода init.Этот метод init применим только к классам Zend.Это означает, что вы можете использовать его только тогда, когда расширяете класс Zend.Это означает, что вы на самом деле переопределяете метод init.

Например, он находится в классе Zend_Db_Table_Abstract:

/**
 * Initialize object
 *
 * Called from {@link __construct()} as final step of object instantiation.
 *
 * @return void
 */
public function init()
{
}

Так что если вы измените свою модель для расширения на zend, она будет работать:

class MyModel extends Zend_Db_Table_Abstract
{
    public function init()
    {
        // prepare something
    }   

... 
}

То же самое и с Zend_Controller_Action, поэтому вы также можете использовать его в своих контроллерах.

2 голосов
/ 09 мая 2011

Попробуйте добавить вызов init () из конструктора следующим образом:

public function __construct()
{
  parent::__construct();
  $this->init();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...