1

アクセス拒否ページのルートを指定するユーザー管理用の CakePHP プラグインを使用しています。

Router::connect('/accessDenied', array('plugin' => 'usermgmt', 'controller' => 'users', 'action' => 'accessDenied'));

メインの Cake アプリで、このルートを「オーバーライド」して、独自のコントローラーを使用したいと考えています。

プラグインを変更したくありません...プラグインが更新されたときに将来のコードメンテナンスが発生するためです。

プラグインのルートを自分のものに置き換える方法はありますか?

4

2 に答える 2

3

試してくださいRouter::promote()

Router::promote()
ルート (デフォルトでは、最後に追加されたもの) をリストの先頭に昇格させます

私があなたの質問を正しく理解していれば、あなたは 1 つのルートだけを上書きしたかったのです。app/Config/routes.phpで、オーバーライドされたルートとプロモートを追加しますCakePlugin::routes();

//.... your routes....

//Here the plugin routes being loaded
CakePlugin::routes();

//Overwrite route:
Router::connect('/accessDenied', array('plugin' => 'usermgmt', 'controller' => 'users', 'action' => 'accessDenied'));
Router::promote(); //and promote it

これでうまくいくはずです。プロモートは、最後のルートを一番上に移動するだけです。CakePHP では、ルーティングは先着順 (ソースをよく確認すると配列です) として機能するため、昇格すると、最後に定義されたルートが最上位に移動され、プラグインで定義されたルートが上書きされます。

編集

宣伝したくない場合は、 の CakePlugin::routes()にルートを定義することもできます。それもうまくいくはずです。

于 2013-09-16T05:22:59.117 に答える