1

ここに私の最初の投稿です:)

URL とパラメータの扱いに問題があります。ルーター クラス API のドキュメントを何度も読みましたが、役に立たないことがわかりました。

まず、CakePHP(1.3) で URL を処理するための「ユニバーサル」フォーマットがあるかどうかを知りたいです。私は現在、すべての URL を単純な配列 (Router::url および $html->link が受け入れる形式) として処理しており、それらを引数として Cake 独自のメソッドに渡すだけであれば簡単です。何か他のものが必要な場合、通常は注意が必要です。

主に、文字列 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 つのコア フォーマット間で変換するのと同じくらい単純なことを行うには、非常に多くのコードのように思えます。また、$parsed は $arrayUrl と同じではないことに注意してください。もちろん、 $parsed を手動で微調整することもできます。実際、簡単なパッチとして数回実行しましたが、これについて詳しく説明したいと思います。

また、プレフィックス ルーティングを使用する場合、コントローラーの $this->params にはアクション ([action] => 'admin_edit') にプレフィックスが埋め込まれており、Router::parse() の結果には含まれていないことにも気付きました。もちろん、両方とも独自のキーにプレフィックスがあります。

要約すると、これら 3 つ (プレフィックスを含める場合は 4 つ) のいずれかの間で URL を正しい方法で変換するにはどうすればよいですか? もちろん、これをハックするのは簡単ですが、ケーキは私よりも多くの経験と洞察を持った多くの人々によって開発されていると信じたいので、良い方法があると思います.この「認識された不正行為」の理由。

私は自分の問題をできる限りうまく提示しようとしましたが、英語のスキルが乏しいため、いくつかの回り道をしなければなりませんでした:)必要に応じてさらに説明します.

4

1 に答える 1

2

Cake URL の「公式」形式は、配列表記でなければなりませんarray('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true)。URL を記述するときは常に、この形式を使用する必要があります。Router クラスは、URL が使用されている場所に応じて、それらを文字列 ( /admin/foo/bar/baz) または Dispatcher に必要な情報( ) に変換します。array('named' => array(), 'pass' => array(), …)

どのコントローラー アクションを呼び出すかという観点から考える必要があります。URL (文字列として) は、Web コンテキストでこれを達成するために必要な悪にすぎません。Dispatcher 形式を使用する必要はありません。また、URL スキームを変更したい場合にこれらを逆ルーティングできないため、URL を指定するときに文字列表記を使用しないでください。

これら 3 つの形式を一方から他方に変換する必要がある理由を、例を挙げて説明していただけないでしょうか?

于 2010-06-13T04:15:49.840 に答える