現在、URL から「ページ」を削除する解決策を探していますが、コントローラーを追加するのは難しくありません。
私は周りを見回して解決策をGoogleで検索しましたが、彼らが提供できる最良の解決策はこれでした:
Router::Connect('/*', array('controller' => 'pages', 'action' => 'display'));
しかし、このソリューションの問題は、コントローラーを追加するたびに、 config/routers.phpファイルに次の行を追加する必要があることです。
Router::Connect('/Users/:action/, array('controller' => 'Users');
Router::Connect('/users/:action/, array('controller' => 'Users');
この 2 行を追加した理由は、URL で大文字と小文字を区別したくなかったからです。
また、Web サイトが「FINISHED」になると、コントローラーが変更されることはめったにないことも知っています。
だから私の解決策は次のとおりでした:
/*
* Get URL
* Seperate in array
* Remove empty elements
*/
$url = array_filter(explode("/", Router::url()));
/*
* Get Controllers list
*/
$Controllers = App::objects('controller');
$CleanControllers = array();
/*
* Remove string 'Controller' from element
* lower string
*/
foreach($Controllers as $Controller) {
$CleanControllers[] = strtolower(str_replace('Controller', '', $Controller));
}
/*
* Check if first element, from URL, is NOT a controllers array
*/
if(!in_array(strtolower(reset($url)), $CleanControllers)) {
/*
* Forward to "Pages" controller
*/
Router::connect('/', array('controller' => 'Pages', 'action' => 'display', 'home'));
Router::connect('/*', array('controller' => 'Pages', 'action' => 'display'));
}
/*
* Check if first element, from URL, is NOT a controllers array
*/
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';
私の質問は、このソリューションはパフォーマンスキラーですか? もしそうなら、誰もがより良い解決策を知っていますか?
なぜなら、CakePHP の高度なルーティングを見ると、SUPER Advanced ルーティングが必要なように思えるからです... または、単に理解していないだけです。
CAKEPHP バージョン 2.1
ご協力いただきありがとうございます!