2017-03-23 6 views

답변

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 메서드에서는 디스패치 이벤트에 대한 이벤트 처리기를 등록합니다. 이 이벤트는 컨트롤러 동작이 실행되기 전에 트리거됩니다. 그런 다음 이벤트 핸들러에서 이미 일치 된 라우트를 겹쳐 쓸 수 있습니다. 이 솔루션을 사용하면 동일한 경로에 머물러 있지만 다른 컨트롤러가 요청을 처리 할 수 ​​있습니다.