1

我在 Zend Framework 中工作了一段时间,目前我正在重构我的代码的某些部分。我想消除的一件大事是我的abstract控制器类,它启动了许多变量,这些变量必须存在于我的所有控制器中,例如$success,$warning$error. 这部分可以在控制器插件中完成,但是将这些变量发送到相关视图的最佳方式是什么。目前我在我的abstract控制器类中使用一个自定义方法,我从我的所有控制器中调用它。

protected function sendViewData(){
    $this->view->success  = $this->success;
    $this->view->warning  = $this->warning;
    $this->view->error    = $this->error;
}

然后在我所有控制器的所有操作中调用它

parent::sendViewData();

我正在寻找通过插件控制器或更适合此的任何东西来自动化这个过程

4

2 回答 2

5

你可以在你的抽象控制器中设置一个postDisplatch方法来初始化视图数据(参见“Pre- and Post-Dispatch Hooks”部分)。

这样,在每个动作中,您都可以初始化您的$this->success$this->warnning$this->error变量,并在执行动作后将其传递给视图。

于 2010-12-03T18:54:27.130 回答
2

最好的做法是,定义一个基本控制器并让其他控制器扩展它,而不是直接调用Zend_Controller_Action方法

// Your base controller file ApplicationController.php
class ApplicationController extends Zend_Controller_Action {
       // method & variable here are available in all controllers
        public function preDispatch() {
            $this->view->success  = $this->success;
            $this->view->warning  = $this->warning;
            $this->view->error    = $this->error;
        }
}

你的其他普通控制器是这样的

// IndexController.php
class IndexController extends ApplicationController {

}

现在这些(成功、警告和错误)变量在所有视图/布局文件中都可用,ApplicationController.php您还可以在其中保存其他控制器的共享功能

于 2010-12-03T19:29:55.830 回答