7

config からナビゲーションを構築します。

'navigation' => array(
    'default' => array(
        'admin' => array(
                'label' => 'Administration',
                'controller' => 'index',
                'action' => 'index',
                'route' => 'admin/default',
              ),
         'album' => array(
                'label' => 'Album',
                'controller' => 'index',
                'action' => 'index',
                'route' => 'album/default',
              ),
  /* ... */

ルーティングは、本当のように構成されています。メニューのナビゲーションが機能します。リンク メニューは、目的のモジュールの目的のコントローラー/アクションにつながります。しかし、メニューと 1 つまたは別のメニュー項目への遷移を導入する際に、アクティブは両方のポイントと「管理」と「アルバム」を同時にマークしました。私が理解しているように、コントローラーとアクションの名前をそれらと一致させるためですが、まだ「ルート」があり、それは異なります...アイテムごとに異なるURLが生成されたのは当然です...しかし、どういうわけか、これにより、両方ともアクティブとしてマークされます。

ルーティング構成:

    'router' => array(
    'routes' => array(
        'admin' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/admin',
                'defaults' => array(
                    '__NAMESPACE__' => 'Admin\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'default' => array(
                    'type'    => 'Segment',
                    'options' => array(
                        'route'    => '/[:controller][/:action[/id:id]]',
                        'constraints' => array(
                            'controller'    => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'action'        => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'id'            => '[0-9]+',
                        ),
                        'defaults' => array(
                        ),
                    ),
                ),

アルバムのルーティング構成が似ています...

なぜこれが起こっているのですか?ありがとう。

4

2 に答える 2

0

コントローラー名に名前空間を含めると、それらは一意になり、衝突しません。

Admin\Controller\IndexController
Album\Controller\IndexController

それよりも

Index
Index
于 2013-02-12T09:40:33.023 に答える
0

ZF2 の仕組みのようです ( isActive()Zend\Navigation\Page\Mvc.php の関数を参照)。最初はルート/コントローラー/アクションの一致をチェックしますが、失敗した場合、ZF2 は再びコントローラー/アクションのペアだけをチェックします。したがって、次の 3 つの方法が考えられます。

  1. https://github.com/zendframework/zf2/issuesでチケットを開き、応答を待ちます。

  2. オーバーライドし\Zend\Navigation\Page\Mvcます。

  3. indexコントローラーには別の名前を選択します (名前は Mvc.php のコントローラーのデフォルト名であるため、使用しないでください)。

于 2012-11-17T15:02:32.160 に答える