如何在Module.php文件中的类Module中更改控制器和操作?必须在没有重定向的情况下限制访问。 URI应保持不变。因此,有必要不仅覆盖模板输出,即控制器和动作。
答案 0 :(得分:1)
您要实现的目标是更改匹配的路由处理程序。你可以这样做:
<?php
/* module/Application/src/Module.php */
namespace Application;
use Application\Controller\IndexController;
use Zend\EventManager\EventInterface;
use Zend\ModuleManager\Feature\BootstrapListenerInterface;
use Zend\Mvc\MvcEvent;
use Zend\Router\Http\RouteMatch;
class Module implements BootstrapListenerInterface
{
public function getConfig()
{
return include __DIR__ . '/../config/module.config.php';
}
public function onBootstrap(EventInterface $e)
{
if (!$e instanceof MvcEvent) {
return;
}
$em = $e->getApplication()->getEventManager();
$em->attach(MvcEvent::EVENT_DISPATCH, [$this, 'preCheck'], 1000);
}
public function preCheck(MvcEvent $e)
{
$e->setRouteMatch(new RouteMatch([
'controller' => IndexController::class,
'action' => 'test'
]));
}
}
在onBoostrap方法中,您为dispatch事件注册一个事件处理程序。在执行控制器操作之前触发此事件。在您的事件处理程序中,您可以覆盖已匹配的路由。 使用此解决方案,您可以保持相同的路由,但另一个控制器可以处理请求。