1

私はこれをDI構成の一部として、スケルトンアプリケーションから取得しています。

                'routes' => array(
                    'default' => array(
                        'type'    => 'Zend\Mvc\Router\Http\Segment',
                        'options' => array(
                            'route'    => '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                'controller' => 'Application\Controller\IndexController',
                                'action'     => 'index',
                            ),
                        ),
                    ),  

次のルーティングを行いたいと思います。

http://me.com/mycontroller/myaction --> 
controller=Applicaiton\Controller\Mycontroller 
method=myactionAction

ただし、上記の構成では次のようになります。

http://me.com/mycontroller/myaction --> 
controller=Mycontroller 
method=myactionAction

ご覧のとおり、コントローラーの名前空間がありません。名前空間をどこに/どのように配置しますか?(すべてのコントローラーに対してDIエイリアスを作成できることはわかっていますが、それではセグメントマッチングの目的が無効になります。)

4

2 に答える 2

2

あなたが最初に達成しようとしていたことを達成することは完全に可能です。デフォルトでは、__ NAMESPACE__キーを追加し、コントローラーキーをわずかに変更することができます。

あなたはこれを行うことができたでしょう:

'default' => array(
    'type' => 'Zend\Mvc\Router\Http\Segment',
    'options' => array(
        'route' => '/[:controller[/:action]]',
        'constraints' => array(
            'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
        ),
        'defaults' => array(
            '__NAMESPACE__' => 'Application\Controller',
            'controller' => 'Index',
            'action' => 'index',
        ),
    ),
),

必要となる他の唯一の変更は、コントローラーをモジュール構成で呼び出し可能として登録する場合、次のようにする必要があります。

'controllers' => array(
    'invokables' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController',
    ),
),

IndexControllerの代わりにキーでIndexを使用した方法に注意してください。

ルートのデフォルト定義のこの__NAMESPACE__キーと、呼び出し可能配列の動作のキーの最後にある「Controller」の削除については、私が見つけたドキュメントのどこにも記載されていません。私は実際に、ZendSkeletionApplicationのルーティングがどのように機能するかからこの情報を収集しました。

https://github.com/zendframework/ZendSkeletonApplication/blob/2ce1cf0dd40046024970d87d3998e16cde41c7db/module/Application/config/module.config.php

于 2013-05-28T18:32:39.183 に答える
1

ルートのコントローラにセグメントを使用しないでください。セグメントマッチングは、アクションおよびその他のパラメーターに対しては可能ですが、コントローラーに対しては不可能です。mycontrollerがMyNamespace\Mycontrollerと一致するようにエイリアスを使用することもできますが、お勧めしません。最良で、最も簡単で、最もパフォーマンスの高い方法は、すべてのコントローラーにルートを設定し、必要に応じてアクションにセグメントを使用することです。

于 2012-05-09T09:44:04.890 に答える