根据this blog post,应该可以在模型中使用init()方法。像这样:
class MyModel
{
public function init()
{
// prepare something
}
...
}
这对我不起作用。有人知道我是否必须在某个地方设置一个参数(例如在配置文件中)或者我的Zend FW版本(1.11.4)中是否还有这种情况?我在init方法中检查了error_log('something')并且根本没有调用它。
更新: 我稍微扩展了Adam的解决方案:
public function __construct() {
if (get_parent_class($this) != false) {
parent::__construct();
}
if(method_exists($this, 'init')) {
$this->init();
}
}
这样它就可以放在基类中然后扩展。以防万一之后有人也需要相同的解决方案。
答案 0 :(得分:4)
该帖子非常具有误导性。如果应用程序中的模型类扩展Zend_Db_Table
或Zend_Db_Table_Row
,这在帖子的示例中并非如此,但是从文本中隐含,那么是的,您可以添加将被调用的init()方法自动。为了在您的应用程序中工作,您需要从创建模型的任何方法或基类的构造函数中调用方法。
答案 1 :(得分:2)
尝试从构造函数中添加对init()的调用,如下所示:
public function __construct()
{
parent::__construct();
$this->init();
}
答案 2 :(得分:2)
你有这个问题因为php类没有init方法。该init方法仅适用于Zend类。这意味着您只能在扩展Zend类时使用它。这意味着你实际上覆盖了init方法。
E.g。这里是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相同,这就是为什么你也可以在你的控制器中使用它。