ZF2控制器动作执行公共代码

时间:2014-10-21 13:17:50

标签: php zend-framework2

道歉,如果这是一个基本问题,但我试图在ZF2文档中找到答案,我找不到明确的答案。

我有一组控制器,每个控制器都包含一组操作。我希望每个操作都检查请求中是否存在某个参数。什么是最好的,以确保所有行动都能完成,如果我添加一个新的行动,它将自动满足?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分: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;
}