2012-03-22 7 views
2

私はCakePHP 2.1.0を使用していますが、コントローラのアクションにアクセスしたい場合は、アクション名にどのようなケーシングを使用するかは関係ありません。あなたはいつもコントローラーでそのアクションを打つでしょう。ただし、アクションには、アクションにアクセスするのに使用したものと同じケーシングで、ビュー・ファイルの名前を付ける必要があります。だから、もし私がhttp://example.com/users/aDdに行くなら、 "Users"コントローラの "add"アクションのコードを期待どおりにヒットしますが、存在しないaDd.ctpを探します。アクション名が小文字であるか、またはURLが悪いと見なされる場合にのみアクション名にアクセスできるようにする方法はありますか?CakePHP:小文字のアクション名を強制しますか?

更新:私は、これをWebサーバーレベルではなくCakePHPレベルで行うのが最も安全だと思います。このように、何らかの理由でhttp://example.com/FoOをケーシングに関係なく有効にしたい場合は、http://example.com/barhttp://example.com/users/addには小文字でしかアクセスできないようにする必要があります。

誰もが「アプリケーション」コントローラの「のbeforeFilter」方法?:

if ($this->request->params['controller'] != strtolower($this->request->params['controller']) || $this->action != strtolower($this->action)) { 
    $redirect = Router::url(array(
     'controller' => strtolower($this->request->params['controller']), 
     'action' => strtolower($this->action) 
    ) + $this->request->params['pass']); 

    foreach ($this->request->params['named'] as $key => $value) { 
     $redirect .= "/$key:$value"; 
    } 

    $this->redirect($redirect); 
} 
+0

、私はそれだけ小文字バージョン(add.ctp)をロードするようにコントローラを取得する数行のコードを追加するために友好的だと思います。それをよりきれいにするためにブラウザのURLを書き換えることがボーナスになります。 – starlocke

+0

ちょうど推測ですが、おそらくルーターの定義に一致するものがあれば、何とかそれらをキャッチできます。http://book.cakephp.org/2.0/ja/development/routing.htmlを参照してください。あるいは、これがうまくいかない場合は、あなたのウェブサーバに応じて常にmod_rewriteなどがあります。 –

+0

あなたは常に小文字のビューでリンクを構築すれば、誰があなたのウェブサイトを訪問し、違う方法でURLを送ってくれるでしょうか?私はそれが有用であるために、毎回このコードを実行する価値があるとは確信していません。おそらく1〜2回でしょうか? – nIcO

答えて

1

まあこれを追加することで欠陥を見ません。どのようにあなたのAppControllerでこれらの行について:このシナリオでは

public function beforeFilter() { 
    $this->view = strtolower($this->view); 
} 
+1

これはいい考えですが、URLが有効であるかのように見えます。私が理解していることから、これはSEOにとっては悪いことです([here](http://www.seroundtable.com/archives/019577.html参照)) – Nick

関連する問題