2014-10-21 2 views
0

Извините, если это основной вопрос, но я попытался найти ответ в документации ZF2, и я не могу найти четкий ответ.ZF2 Действия контроллера выполняют общий код

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

Большое спасибо за помощь.

ответ

1

Вы можете расширить AbstractActionController и добавить свои собственные методы или переопределить существующие в соответствии с вашими потребностями.

use Zend\Mvc\Controller\AbstractActionController; 

abstract class AbstractCustomController extends AbstractActionController 
{ 
    //custom methods 
} 

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

<?php 

namespace Custom\Controller; 

use Zend\View\Model\ViewModel;  
use Custom\Controller\AbstractCustomController; 

class NewController extends AbstractUserController { 
    //new controller which has access to methods from extented AbstractController 
} 

Вы не указали, на что именно вы проверяете. Но использование MVC Event может быть более простым и простым в использовании. Вы просто добавить некоторые функции к module.php, например:

public function onBootstrap(MvcEvent $e) { 
//check request 
} 

Это просто пример и может не работать, хотя. В зависимости от порядка событий запрос не может быть заполнен в данном месте, и вы будете вынуждены использовать другой.

Я однажды использовал onDispatch(\Zend\Mvc\MvcEvent $e), предоставленный AbstractActionController, для задачи, которая была немного похожа на вашу. Но опять же, если бы вы были более конкретными, мы, вероятно, могли бы дать вам более конкретный ответ.

с наилучшими пожеланиями и удачи!

Редактировать: Что касается вашего вопроса в комментарии, вы можете прослушать событие маршрутизации и получить свои параметры там.

//Module.php within your onBootstrap Method 
$application = $e->getApplication(); 
$eventManager = $application->getEventManager(); 
$eventManager->attach('route', function(MvcEvent $mvcEvent) { 
    $params = $mvcEvent->getRouteMatch()->getParams(); 
    echo '<pre>'; print_r($params); exit; 
} 
+0

Благодарим за это. Это событие onBootstrap, в котором я нуждался. Еще один вопрос, хотя, если вы не возражаете - как я могу проверить конкретный параметр запроса из этой функции? Это довольно легко, когда мой код был в AbstractActionController, я просто вызвал: $ this-> params() -> fromQuery ('param_name'); Как добиться того же результата из функции onBootstrap? С помощью параметра $ e event каким-то образом? – eebsie

+0

@eebsie Я обновил свой ответ, это то, что вы ищете? – cptnk

+0

спасибо за ваш ответ, и это может сработать. Но я действительно получил этот бит, работающий с этой строкой кода: '$ e-> getParams() [" request "] -> getQuery() -> offsetGet ('parameter-name');' – eebsie

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