2014-02-17 3 views
0

Я не понимаю, почему следующий код не работает. Возможно, я ничего не понимаю с помощью EventManger/SharedEventManager ind Zend Framework 2.Не удается подключить EVENT_ROUTE в контроллере

Пока что я ничего не мог найти об этом в Интернете.

Может быть, экземпляр IndexContoller уже уничтожен в EVENT_RENDER и не создан в EVENT_ROUTE? Возможно, это так, или я что-то пропустил?

class IndexController extends AbstractActionController 
{ 

    public function routeEventOccured() { 
    echo 'test'; 
    } 

    public function renderEventOccured() { 
    echo 'test'; 
    } 

    public function __construct() 
    { 
    $this->getEventManager()->attach(MvcEvent::EVENT_ROUTE, array($this, 
            'routeEventOccured')); 
    $this->getEventManager()->attach(MvcEvent::EVENT_RENDER, array($this, 
            'renderEventOccured')); 
    } 
} 
+2

Управление контроллером происходит в 'EVENT_DISPATCH'. Это * после * 'EVENT_ROUTE'. Поэтому невозможно подключиться к 'EVENT_ROUTE' из вашего контроллера. Событие-крючки должны быть объявлены 'onBootstrap()' вашего 'Module' – Sam

+0

Спасибо за эту информацию, как я. Но что такое EVENT_RENDER и EVENT_FINISH? Imho экземпляр контроллера уже уничтожен в момент их возникновения. – Gizzmo

ответ

2

Zend Framework 2 использует концепцию события. Один класс может: trigger события, и другие классы могут слушать событиям. Технически, запуск события означает просто вызов метода «обратного вызова» другого класса. Управление событиями осуществляется внутри компонента Zend\Mvc\EventManager.

«Жизнь» приложения состоит из нескольких этапов. Каждый этап жизненного цикла приложения инициируется приложением путем запуска события. Другие классы (принадлежащие Zend Framework или специфические для вашего приложения) могут прослушивать событиям и реагировать соответствующим образом.

Ниже приведены четыре основные события (этапы жизни) представлены:

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

Маршрут. Когда это событие запускается, URL-адрес запроса анализируется с использованием класса router (обычно с классом Zend\Mvc\Router\Http\TreeRouteStack.Если найдено точное совпадение между URL-адресом и маршрутом , запрос передается классу контроллера конкретного сайта назначен на маршрут.

Отправка. класс контроллера «отправляет» запрос, используя соответствующий метод действия и выдает данные, которые могут быть отображены на веб-странице.

Рендер. об этом события, данные, полученные Метод действия oller передается для рендеринга в класс Zend\View\Renderer\PhpRenderer. Класс renderer использует шаблон файл для создания HTML-страницы.

+0

Спасибо за информацию, но что происходит с событиями: EVENT_RENDER и EVENT_FINISH? – Gizzmo

Смежные вопросы