2016-11-02 33 views
1

ページがレンダリングされる前に実行されるコードがModule.phpのようにあります。コントローラはInjectApplicationEventInterfaceを実装する必要があります

$eventManager->attach(MvcEvent::EVENT_RENDER, function(MvcEvent $event) { 

    /** @var ServiceManager $sm */ 
    $sm = $event->getParam('application')->getServiceManager(); 

    $logger = $sm->get(LogService::class)->getLogger(); 
    $themeResolver = $sm->get(ThemeResolveService::class); 

    $df = $sm->get(DataFetchService::class); 

    $params = $sm->get('ControllerPluginManager')->get('params'); 
    $security = $sm->get(SecurityService::class); 

    try { 
     $cleanedParams = $security->clean($params->fromRoute()); 
    } catch (\Exception $e) { 
     echo $e->getMessage(); 
     $logger->info($e->getMessage()); 
     die(); 
    } 

    /** theme resolving code **/ 
} 

私が持っている問題は、この行を次のとおりです。

$cleanedParams = $security->clean($params->fromRoute()); 

$params->fromRoute()は、ほとんどの時間の作品が、私は、サードパーティのAPIから自分のアプリケーションを呼び出すときに、時々私はこのエラーを取得します。

Controllers must implement Zend\Mvc\InjectApplicationEventInterface to use this plugin

私は、呼び出しが異なる何も表示されません。私はこのエラーが何を表しているのか明確にする必要があります。アプリケーションの設計を変更する必要があれば、そうしなければなりません。あなただけコントローラ内それを使うべき理由

答えて

1

それは単なる推測ですが、私はあなたがサービスマネージャ経由で使用しているのparams コントローラプラグインはいくつかのケースで割り当てられたコントローラを持っていないと思い、thatsの。 https://github.com/zendframework/zendmvc/blob/master/src/Controller/Plugin/Params.php#L110でデバッグできるはずです。

これは、無効なルートなどにアクセスした場合に発生する可能性があります。

Futhermore私の意見では、あなたはroutematchがそれを使用する前に存在wheter確かにあなたがチェックする必要があり

$event->getRouteMatch()->getParams(); 

のように、代わりのparams コントローラプラグインの現在のルートの試合からのparamsを取得する必要があります。

関連する問題