код запускается перед каждым действием в модуле ZF2?

Я хочу написать код для запуска перед каждым действием в моем модуле. Я пытался подключиться к onBootstrap(), но код работает и в других модулях.

Любые предложения для меня?


person user1820728    schedule 13.11.2012    source источник


Ответы (1)


Есть два способа сделать это.

Один из способов - создать службу и вызвать ее в каждом методе отправки контроллеров.

Use onDispatch method in controller. 


    class IndexController extends AbstractActionController {


        /**
         * 
         * @param \Zend\Mvc\MvcEvent $e
         * @return type
         */
        public function onDispatch(MvcEvent $e) {

            //Call your service here

            return parent::onDispatch($e);
        }

        public function indexAction() {
            return new ViewModel();
        }

    }

не забудьте включить следующую библиотеку поверх вашего кода

use Zend\Mvc\MvcEvent;

Второй способ - сделать это через Module.php, используя событие при отправке.

namespace Application;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

class Module {

    public function onBootstrap(MvcEvent $e) {        
        $sharedEvents = $e->getApplication()->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch', array($this, 'addViewVariables'), 201);
    }

    public function addViewVariables(Event $e) {
        //your code goes here
    }

    // rest of the Module methods goes here...
    //...
    //...
}

Как создать простой сервис с помощью ZF2

ссылка2

ссылка3

person Developer    schedule 13.11.2012
comment
Просто в качестве комментария было бы здорово, если бы вы могли сократить свои примеры кода. Мало полезного в том, чтобы опубликовать кучу кода и разобраться во всем самостоятельно. Пожалуйста, объясните, что вы делаете (я знаю это, но вопросник может и не знать) - person Sam; 13.11.2012
comment
Спасибо, Сэм, что напомнил мне, что утруждайте себя ответом на вопрос только в том случае, если у вас есть достаточно времени, чтобы ответить на него точно. в противном случае не тратьте свое время на быстрый ответ. Я буду помнить об этом и отвечу на вопрос только в том случае, если у меня будет достаточно времени, чтобы ответить подробно. - person Developer; 14.11.2012
comment
Большое спасибо за ваш ответ. Я могу сделать это сейчас. - person user1820728; 14.11.2012
comment
Для ясности этот ответ сработал, я согласен, что он может помочь объяснить больше, но он решает проблему. - person jasonsemko; 07.09.2014