3

以下のような 3 つのモジュールとルート構成を持つアプリケーションがあります。

  • admin.domain.tld/[:controller[:/action]] => 管理者
  • rest.domain.tld/[:controller[:/id]] =>残り
  • domain.tld/[:controller[:/action]] => サイト

各モジュールのすべてのコントローラーにDIエイリアスを設定します

REST モジュール DI エイリアス:

'alias' => array(
    'index' => 'Rest\Controller\IndexController',
    ...
),

管理モジュール DI エイリアス:

'alias' => array(
    'index' => 'Admin\Controller\IndexController',
    ...
),

サイト モジュール DI エイリアス:

'alias' => array(
    'index' => 'Site\Controller\IndexController',
    ...
),

ご覧のとおり、一部のコントローラーは同じ名前 (例: IndexController) を持っていますが、zf2 は設定を LIFO 動作とマージしたため、'index' エイリアスは常に最後に追加されたモジュールから取得されます。

アプリケーション構成

'modules' => array('Rest','Admin', 'Site'),

http://admin.domain.tld/にアクセスすると、indexエイリアスが返されると予想されますAdmin\Controller\IndexControllerが、サイトモジュール (最後に登録) には同じエイリアスがあるためindexSite\Controller\IndexController

異なる DI エイリアスを使用して同じコントローラー名に一致させる方法は?

4

1 に答える 1

3

新しいビューレイヤーがマスターにマージされる前に、ビュースクリプトを解決するときにコントローラーが正しく動作するためのエイリアスが必要でした。これはもう必要ありません。コントローラーにエイリアスを使用することはもうお勧めしません。エイリアシングの問題は、1つのFQCNに対して1つのエイリアスがあるため、問題はこれに直接関係しています。

あなたがする必要があるのは、DI構成からエイリアスを削除し、代わりに明示的なルートを使用することです。「魔法の」ルート[:controller [/:action]]は悪い習慣であり、あなたを助けることができるよりも多くの問題を引き起こします。したがって、いくつかの明示的なルートを記述し、エイリアスを削除します。

于 2012-04-15T10:21:40.973 に答える