8

長い間検索しても成功しませんでした。私が諦める前に、私は尋ねたいと思います:

サブドメインをZendFramework2のモジュールにルーティングする方法はありますか?お気に入り:

サブドメイン=>モジュール
api.site.com=>api
dev.site.com => dev
admin.site.com => admin
site.com => public
.. ..

このようにしてみましたが、デフォルト(インデックス)以外のコントローラーにアクセスできません。

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Hostname',
            'options' => array(
                'route' => 'site.com',
                'defaults' => array(
                    '__NAMESPACE__' => 'Application\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            )
        )
    ),
),

お時間を割いていただきありがとうございます。

4

2 に答える 2

5

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がこのリスナーを登録する方法の例を表示するには、ここをクリックしてください

于 2012-10-25T15:14:11.657 に答える
4

DASPRIDS Rounterプレゼンテーションのスライド#39を正しく理解していれば、モジュールごとにサブドメインホストを定義するのは簡単です。

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Hostname',
            'options' => array(
                'route' => 'api.site.com',
                'defaults' => array(
                    '__NAMESPACE__' => 'Api\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            )
        )
    ),
),

など、すべてのモジュールに対して独自にこれを行います。

于 2012-10-25T14:51:06.167 に答える