Zend Framework 2には、モジュールへのルーティングの概念がありません。すべてのルーティングマッピングは、URIパターン(HTTPルートの場合)と特定のコントローラークラスの間にあります。とはいえ、特定のパターンに基づいて複数のコントローラーにマップするURIパターンを定義できるZend\Mvc
イベントリスナー()を提供し、 「モジュールルーティング」をエミュレートします。Zend\Mvc\ModuleRouteListener
このようなルートを定義するには、これをルーティング構成として配置します。
'router' => array(
'routes' => array(
// This defines the hostname route which forms the base
// of each "child" route
'home' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'site.com',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// This Segment route captures the requested controller
// and action from the URI and, through ModuleRouteListener,
// selects the correct controller class to use
'default' => array(
'type' => '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' => 'Index',
'action' => 'index',
),
),
),
),
),
),
),
(この@ ZendSkeletonApplicationの例を表示するには、ここをクリックしてください)
ただし、これは方程式の半分にすぎません。また、特定の命名形式を使用して、モジュール内のすべてのコントローラークラスを登録する必要があります。これも同じ構成ファイルを介して行われます。
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController'
),
),
配列キーは、ModuleRouteListenerが適切なコントローラーを見つけるために使用するエイリアスであり、次の形式である必要があります。
<Namespace>\<Controller>\<Action>
この配列キーに割り当てられた値は、コントローラークラスの完全修飾名です。
(この@ ZendSkeletonApplicationの例を表示するには、ここをクリックしてください)
注:ZendSkeletonApplicationを使用していない場合、またはデフォルトのアプリケーションモジュールを削除した場合は、独自のモジュールの1つにModuleRouteListenerを登録する必要があります。 ZendSkeletonApplicationがこのリスナーを登録する方法の例を表示するには、ここをクリックしてください