2017-03-23 10 views
-2

モジュールModule.php内のクラスModuleのコントローラとアクションを変更するには?リダイレクトなしでアクセスを制限する必要があります。 URIは変更されません。したがって、テンプレート出力だけでなく、コントローラとアクションを上書きする必要があります。クラスモジュールのコントローラとアクションを変更してください

答えて

1

達成しようとしているのは、一致するルートハンドラを変更することです。あなたがディスパッチイベントのイベントハンドラを登録onBoostrap方法で

<?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' 
     ])); 
    } 
} 

:あなたはこのような何かを行うことができます。このイベントは、コントローラアクションが実行される前にトリガされます。イベントハンドラでは、すでに一致したルートを上書きすることができます。 このソリューションでは、同じルートに留まりますが、別のコントローラが要求を処理できます。

関連する問題