私はいくつかのプレフィックスを使用するアプリを持っていますが、それほど頻繁ではありませんが、プレースメントを追加するのも珍しいことではありません。この痛みを伴うのは、デフォルトで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で動作しています。
ご意見をいただければ幸いです。
リダイレクトを行う認証コンポーネントですか?必要に応じて、アプリケーションコントローラのbeforefilterでハンドラを作成してリダイレクトを処理する必要があるかもしれません。 –
この例ではyesですが、別のプレフィックスを持つページが何らかの必要な値なしで呼び出された場合、カスタムリダイレクトと同じように簡単にできます。 –