3

現在、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

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

4

1 に答える 1

0

あなたのアプローチは基本的に正しいです。この問題を解決する魔法のスイッチはありません。この種のルーティングについては少し前に記事を書きました。これは以前の Cake バージョン用ですが、マイナーな変更にはまだ関連しています (期待しています)。

于 2012-05-04T22:30:06.953 に答える