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


ZF2 Controller actions execute common code

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

我有一组控制器,每个控制器都包含一组操作。我希望每个操作都检查请求中是否存在某个参数。最好的办法是确保所有操作都能做到这一点,这样如果我添加一个新操作,它也会自动得到满足?

非常感谢你的帮助。

您可以扩展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事件可能更干净、更容易实现。您只需在module.php中添加一些功能,例如:

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

这只是一个例子,可能不起作用。根据事件的顺序,此时可能无法填写请求,您将被迫使用另一个请求。

我曾经将AbstractActionController提供的onDispatch('Zend'Mvc'MvcEvent $e)用于一个与您的任务有点相似的任务。但话说回来,如果你能更具体一点,我们可能会给你一个更具体的答案。

致以最良好的问候和好运!

编辑:关于你在评论中的问题,你可以收听路由事件并让你的参数在那里。

//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;
}