2017-01-19 10 views
3

を無視しているようだ、私は次のルートを使ってみました:ZF2ルーティングはZend Frameworkの2では__NAMESPACE__

 'default' => array(
      'type' => 'Segment', 
      'options' => array(
       'route' => '/:username[/:action]', 
       'defaults' => array(
        '__NAMESPACE__' => 'Website\Controller', 
        'controller' => 'User', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
     ), 

http://www.example.com/MyUsernameHereに行くときしかし、私は404見つからないエラーが出る:

The requested controller could not be mapped to an existing controller class.

Controller: User(resolves to invalid controller class or alias: User)

をルータは'Website\Controller'名前空間を完全に無視して、その前に名前空間を持たないでUserを探します。だから、

、私は手動でそうのようなネームスペースを入力した場合:

 'default' => array(
      'type' => 'Segment', 
      'options' => array(
       'route' => '/:username[/:action]', 
       'defaults' => array(
        'controller' => 'Website\Controller\User', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
     ), 

予想通り、ページの負荷を。

何がありますか?コントローラーに'__NAMESPACE__'パラメーターを使用できませんか? ZF2のウェブサイトには'__NAMESPACE__'を使って明らかにexampleが与えられていますが、実際には動作しません。この例は間違っていて古くなっていますか?

答えて

4

期待通りに動作させるには、ModuleRouteListenerをMVCイベントマネージャに添付する必要があります。あなたが期待どおりにコードが動作することをやった後

public function onBootstrap(MvcEvent $event) 
{ 
    //... 
    $application = $event->getApplication(); 
    $eventManager = $application->getEventManager(); 
    $moduleRouteListener = new ModuleRouteListener(); 
    $moduleRouteListener->attach($eventManager); 
    //... 
} 

:あなたは、あなたのモジュールonBootstrap方法でこれを行うことができます。

実際には、あなたの質問で参照した例のページにこれを記載しておきます。モジュールルートリスナhere in the Zend\Mvc documentationの詳細を確認できます。彼らはそこに書き込みます:

This listener determines if the module namespace should be prepended to the controller name. This is the case if the route match contains a parameter key matching the MODULE_NAMESPACE constant.

+0

これは動作します。どうもありがとうございます。もともとこのコードは、目的を理解できず、不要なタスクをバイパスしたいので、スケルトンアプリケーションからこのコードを移動しました。 –

関連する問題