CakePHPのURLを使用する正しい方法は何ですか?
-
26-09-2019 - |
質問
それだここで私の最初のポスト:)
私は、URLやパラメータを扱うといくつかの困難を抱えています。私は上のルータクラスのAPIドキュメントを経て何度も何度も、有用な何も見つからなかっました。
まず第一に、私は、URLを処理するためのCakePHPのいずれかの「ユニバーサル」形式(1.3)があるかどうかを知りたいのです。私は現在、(ルータ:: URLおよび$ HTML->リンクが受け入れる形式で)単純な配列としてすべての私のURLを処理することだし、それは限り、私はケーキの独自のメソッドに引数として渡す必要があると簡単です。私は何か他のものを必要とする場合には、通常、トリッキー取得します。
主に、私は基本的な配列形式に文字列のURLを変換の問題を抱えています。 レッツは、私が文字列に$ arrayUrlを変換すると、再びよりURLに言います:
$arrayUrl=array('controller'=>'SomeController','action'=>'someAction','someValue');
$url=Router::url($arrayUrl); //$url is now '/path/to/site/someController/someAction/someValue'
$url=Router::normalize($url); //remove '/path/to/site'
$parsed=Router::parse($url); /*$parsed is now
Array(
[controller] => someController
[action] => someAction
[named] => Array()
[pass] => Array([0] => someValue)
[plugin] =>
) */
2つのコアフォーマット間の変換にような単純な何かをするコードの非常に多くのようです。また、$解析されたことをノートは$ arrayUrlと同じではまだありません。もちろん私は$手動で解析された微調整ができ、実際に私は、迅速なパッチとしてその数回やったが、私はこれの底に取得したいのですが。
は私も()コントローラにプレフィックスルーティングの$ this - > paramsはを使用する場合は、アクションに埋め込まれた接頭辞(すなわち[作用] =>「admin_edit」)とルータの結果::解析を持っていることはありません気づきました。もちろん、どちらも、それ自身のキーに接頭辞を持っています。
どのように私は(あなたが接頭辞ものが含まれている場合、または4)これら3のいずれかの間でURLを変換しない、要約するには、正しい方法の形式に言及しますか? もちろんそれは、このを通じて私の方法をハックするのは簡単だろうが、良いあります、私は推測しているので、私はまだのようで、そのケーキは私よりも多くの経験と洞察力を持っている人々の束によって開発されていると信じてたいですこの「認知不正行為」の理由ます。
私は私ができるように良いように私の問題を提示しようとしましたが、私の錆びた英語力に起因してきた、私はいくつかの回り道を取らなければならなかった:)必要な場合、私はもっと説明します。
解決
ケーキURLの「公式」フォーマットは、配列表記array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true)
であるべきです。あなたはURLを書くたびに、あなたはこの形式を使用する必要があります。ルータクラスはURLが使用されている場所に応じて、ディスパッチャ(/admin/foo/bar/baz
)のために必要ないずれかの文字列(array('named' => array(), 'pass' => array(), …)
)または情報にこれらを変換します。
あなたが起動したいコントローラのアクションの観点からそれを考える必要があります。 (文字列として)のURLは、Webコンテキストでこれを実現するための唯一の必要悪です。あなたはディスパッチャ形式を使用するための任意の必要性があるべきではありません。 URLを指定するときに、これらが逆にルーティングすることはできませんので、あなたがあなたのURLスキームを変更したい場合にも、文字列表記を使用しないでください。
あなたが一方から他方へこれらの三つの形式を変換する必要がある理由たぶん、あなたは一例で説明できる?