2012-02-08 11 views
0

私はいくつかのプレフィックスを使用するアプリを持っていますが、それほど頻繁ではありませんが、プレースメントを追加するのも珍しいことではありません。この痛みを伴うのは、デフォルトでRouter::url()メソッドは、プレフィックスが明示的に指定されていない場合、構築されたすべてのURLが現在のページのプレフィックスを継承することを前提としているということです。"接頭辞の継承"を防ぐ方法はありますか?

これは非常に慎重な行動であると思われますので、大多数の人が役に立つと思っていますが、URLを必要とする接頭辞を使用してURLを単純に構成すると、そうでないときはそれを放置してください。以前は、AppHelper::url()を作成してHelper::url()を作成しました。これは何も想定せず、明示的に要求されたときに接頭辞付きのURLを作成するだけで、ビューで生成されたリンクには大きな助けになります。

しかし、私は上書きしたいと思う別のシナリオがありますが、それについては「クリーン」な方法が見つかっていません。管理リソースへのリンクをブックマークした認証されていないユーザー(例:/admin/thing_that_needs_to_be_administered/some_action)を考えてみましょう。 S /彼はそのブックマークをクリックしますが、ログインしていないのでリダイレクトされます。 /users/loginにリダイレクトされる代わりに、存在しない/admin/users/loginに送信されます。うわー。

誰かが本当に好きなやり方を見つけましたか?この考え方は、リダイレクトが行われるあらゆる場所で明示的に各プレフィックスをfalseに設定する必要はありません。プレフィックスが追加されたときのメンテナンスはあまりにも多すぎます。

私はこれがCake 2でより簡単になると思いますが、私たちはCake 1.3で動作しています。

ご意見をいただければ幸いです。

+0

リダイレクトを行う認証コンポーネントですか?必要に応じて、アプリケーションコントローラのbeforefilterでハンドラを作成してリダイレクトを処理する必要があるかもしれません。 –

+0

この例ではyesですが、別のプレフィックスを持つページが何らかの必要な値なしで呼び出された場合、カスタムリダイレクトと同じように簡単にできます。 –

答えて

0

お持ちでない場合、私はこのルートを試みることをお勧め:

EDIT:明示的にログインURLを設定します申し訳ありませんが、LoginActionの

<?php 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'admin' => false); 
?> 

を。

+0

ええ、短期間にやったことですが、各プレフィックスを明示的にfalseに設定してから、プレフィックスを追加するたびにそのルートを維持する必要があります。私が後にしているのは、その継続的なメンテナンスの方法です。 –

+0

残念ながら、私はコアを修正する以外の方法は知らない。 –

+0

私も。理想的には、 'Router'クラスを拡張して' url'メソッドをオーバーライドしたいと思いますが、それはすべて静的で直接呼び出されるため、実際にはオプションではありません。 :-)ありがとう。 –

関連する問題