4

編集:私は自分で解決策を見つけました。私の ContentManagerController は AbstractRestfulController を拡張するため、当然、インデックス アクションは実装されていません。そのため、'defaults' 配列の 'action' フィールドは '' または null でオーバーライドする必要があります。次に、HTTP 要求タイプに応じた適切なアクションが期待どおりに呼び出されます。私の心はどこにありましたか?

これが更新されたコードです。変化する

'defaults' => array(
    'controller' => 'zfcuser',
    'action'     => 'index',
),

'defaults' => array(
    'controller' => 'ContentManager\Controller\ContentManager',
    'action'     => '', // or null
),

--- 元の投稿 ---

カスタム モジュール (ContentManager) の module.config.php 内からベンダー モジュール ( ZFcUser )のルートをオーバーライドしようとしています。ContentManagerController は元の UserController を拡張します。ZFcUser の module.config.php には触れたくありません。composer による将来の更新後に問題が発生する可能性があるためです。私が作成した設定を、元のベンダー ファイルから厳密に分離したいと考えています。単にオーバーライドする

'route' => '/user',

'route' => '/cms',

今のところ動作しますが、私が達成したいものではありません。そのため、コントローラーのエントリも置き換える必要があります

'defaults' => array(
    'controller' => 'zfcuser',
    'action'     => 'index',
),

'defaults' => array(
    'controller' => 'ContentManager\Controller\ContentManager',
),

しかし、それは私に404エラーを与えます。

The requested controller was unable to dispatch the request.

Controller:
ContentManager\Controller\ContentManager

両方のコントローラーが競合しているようです。ZFcUser module.config.php の「defaults」配列をコメント アウトすると、ContentManagerController が期待どおりに呼び出されます。また、モジュールが ZFcUser の後に登録されていることも確認しました。したがって、オーバーライドは機能するはずです。

私はすでに多くの調査を行いましたが、ここで何が起こっているのかわかりません。あちこちで説明されいる戦略はうまくいきません。

return array(
    'controllers' => array(
        'invokables' => array(
            'ContentManager\Controller\ContentManager' => 'ContentManager\Controller\ContentManagerController',
        ),
    ),
    'router' => array(
        'routes' => array(
            'zfcuser' => array(
                'type' => 'Literal',
                'priority' => 1000,
                'options' => array(
                    'route' => '/cms',
                    'defaults' => array(
                        'controller' => 'ContentManager\Controller\ContentManager',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    .
                    .
                    .
                ),
            ),
        ),
    ),
);

ご協力いただきありがとうございます!

4

1 に答える 1

1

著者は解決策を見つけましたが、質問に答えませんでした (彼はそれを編集しました)。私はそれをコピーして答えに貼り付けています。

私は自分で解決策を見つけました。私の ContentManagerController は AbstractRestfulController を拡張するため、当然、インデックス アクションは実装されていません。そのため、'defaults' 配列の 'action' フィールドは '' または null で上書きする必要があります。次に、HTTP 要求タイプに応じた適切なアクションが期待どおりに呼び出されます。私の心はどこにありましたか?

これが更新されたコードです。変化する

'defaults' => array(
    'controller' => 'zfcuser',
    'action'     => 'index',
),

'defaults' => array(
    'controller' => 'ContentManager\Controller\ContentManager',
    'action'     => '', // or null
),
于 2014-04-29T19:50:13.167 に答える