Intereting Posts
Драйвер переключения CodeIgniter из mysql -> mysqli Не удалось получить доступ к контейнеру Symfony2 в контроллере, расширяющем Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller PHP. Свертывание многомерных массивов по именованному ключу Как использовать echo в php-массиве для возврата в виде строки Передавать значение в файл include в php WAMP, Laravel 5: Маршруты не работают – NotFoundHttpException Печать непосредственно на сетевой принтер с использованием php Использование Zend Framework для проектов с высокой нагрузкой Как создать мой онлайн-сервер для Unity3d? Может ли PHP-скрипт обмануть браузер, считая, что HTTP-запрос завершен? Laravel & Artisan дает французские ошибки Использование PHP Замените SPACES в URL-адресах с% 20 Изменение размера изображений с помощью PHP, поддержка PNG, JPG Использование нескольких виджетов полей формы для одного и того же поля в Drupal Получение сеанса php с использованием c #

Как централизовать код из моих функций init во всех контроллерах?

public function init(){ $this->view->user = Zend_Auth::getInstance()->getIdentity(); $this->view->siteName = Zend_Registry::get('config')->site->name; $this->view->menu = $this->_helper->generateMenu(Zend_Auth::getInstance()->getIdentity()); $this->view->slogan = Zend_Registry::get('config')->site->slogan; } 

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

Solutions Collecting From Web of "Как централизовать код из моих функций init во всех контроллерах?"

Вы можете расширить Zend_Controller_Action:

 public class My_Controller_Action extends Zend_Controller_Action { public function init() { $this->view->user = Zend_Auth::getInstance()->getIdentity(); $this->view->siteName = Zend_Registry::get('config')->site->name; $this->view->menu = $this->_helper->generateMenu(Zend_Auth::getInstance()->getIdentity()); $this->view->slogan = Zend_Registry::get('config')->site->slogan; } } 

Затем вы просто меняете свои контроллеры для расширения My_Controller_Action, а не Zend_Controller_Action. Просто имейте в виду, что если вам нужно добавить дополнительный код к методу init контроллера, вам также придется вызвать parent :: init ():

 public class FooController extends My_Controller_Action { public function init() { parent::init(); // Do something. } public function IndexAction() { // ... } } 

Я бы посоветовал вам написать плагин, расширив Zend_Controller_Plugin_Abstract, это его цель.

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

 class My_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract { protected $_auth = null; protected $_acl = null; public function __construct (Zend_Auth $auth, Zend_Acl $acl) { $this->_auth = $auth; $this->_acl = $acl; } public function preDispatch(Zend_Controller_Request_Abstract $request) { //some code } } 

И затем в вашем bootstrap.php

 $this->_front->registerPlugin(new My_Controller_Plugin_Layout()); 

http://framework.zend.com/manual/en/zend.controller.plugins.html

Чтобы совместно использовать код между контроллерами, создайте помощник действий, который был разработан в первую очередь для решения проблемы, которую вы имеете.

Их можно запустить «по требованию»:

 $myHelper = $this->_helper->MyHelper; $myHelper->someFunction(); 

а также набор крючков, которые процесс отправки вызовет автоматически. Чтобы использовать крючки, вам необходимо зарегистрировать помощника действий с брокером:

 $helper = new App_Controller_Action_Helper(); Zend_Controller_Action_HelperBroker::addHelper($helper); 

Доступные крючки:

  • init()
  • preDispatch()
  • postDispatch()

Для получения дополнительной информации страницу руководства можно найти по адресу http://framework.zend.com/manual/en/zend.controller.actionhelpers.html, и я написал несколько статей о них: http://akrabat.com / 2008/10/31 / с использованием-action-help-in-zend-framework / и http://akrabat.com/2008/11/05/hooks-in-action-helpers/