ZendFramework Отправка переменных из контроллера для просмотра (лучший пример) - PullRequest
1 голос
/ 03 декабря 2010

Я работаю в 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();

Я хотел автоматизировать этот процесс через плагин-контроллер или что-то более подходящее для этого

Ответы [ 2 ]

5 голосов
/ 03 декабря 2010

Вы можете установить метод postDisplatch в вашем абстрактном контроллере для инициализации данных представления (см. Раздел «Хуки до и после отправки»).

Таким образом, в каждом действии вы можете инициализировать переменные $this->success, $this->warnning или $this->error, и они будут переданы в представление после выполнения действия.

2 голосов
/ 03 декабря 2010

Best pactice - определить базовый контроллер и позволить другим контроллерам расширять его, вместо непосредственного вызова метода 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 вы также можете хранить общие функции других контроллеров.

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