道歉,如果这是一个基本问题,但我试图在ZF2文档中找到答案,我找不到明确的答案。
我有一组控制器,每个控制器都包含一组操作。我希望每个操作都检查请求中是否存在某个参数。什么是最好的,以确保所有行动都能完成,如果我添加一个新的行动,它将自动满足?
非常感谢你的帮助。
答案 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;
}