0

ルーティングにPHPとToroPHPを使用しています。

子ページの数が不明

正常に動作しますが、私の場合、親が不明な数の子ページを持つことができる、子と親を持つページを追加できます。

ToroPHPでは、次のようになります。

// My Path: http://www.test.com/product/house/room/table/leg/color/

Toro::serve(array(
    "/" => "Home",
    "/:string/:string/:string/:string/:string/:string/" => "Page"
));

class Page {
    function get($slug, $slug2, $slug3, $slug4, $slug5, $slug6) {
        echo "First slug: $slug";
    }
}

問題

  1. 最大深度を把握してから、「/:string」パラメーターを含む文字列をループして追加することはできますが、見栄えがよくありません。

  2. Pageクラスのget-functionは、不明な数のinパラメーターを取ります。関数の外部から最大深度を計算できますが、取得する値の数を知るための関数が必要です。

質問

  1. 問題1の別の方法はありますか?多分いくつかの正規表現?
  2. 関数に不明な数のパラメーターを取得させるにはどうすればよいですか?
  3. たぶん私はこれを間違った方法で解決しようとしますが、最初の2つの質問は関係ありませんか?もしそうなら私を訂正してください。
4

2 に答える 2

2

アクションがすべてのパラメーターを受け取るには、それらを正規表現に取り込む必要があります。括弧を使用して正規表現で値をキャプチャします。:stringの単なるエイリアスです([a-zA-Z]+)。次のように、最初のセグメントの後にワイルドカードを適用できます。

"/product/(.*?)" => "Page"

ただし、これは、アクションでURLを自分で解析する必要があることを意味します。これも、あまりクリーンではありません。

この特定のケースをよりクリーンにしたい場合は、str_repeatを使用するオプションがあります。

Toro::serve(array(
    "/" => "Home",
    "/" . str_repeat(":string/", 6) => "Page"
));

ToroPHPは非常に単純なライブラリであり、フォークして自分の意志で曲げるのはそれほど難しいことではありません。理想的には、このようなルートをどのように定義しますか?多分次のようなルート/:string*6


PHP関数に定義されているよりも多いまたは少ないパラメーターをいつでも渡すことができます。func_get_argsを使用してすべての渡されたパラメーターを取得し、func_num_argsを使用して渡されたパラメーターの数を取得します。

于 2012-12-11T15:54:25.210 に答える
0

質問2に答えて、GETパラメーターを配列にフォーマットしてから、個々の値ではなく配列を渡すことができますか?

多分次のように:

$allSlugs = array($slug, $slug2, $slug3, $slug4, $slug5, $slug6);

// Pass $allSlugs into your instance of Page::get($allSlugs);

class Page {
    function get($getValues) {
        echo isset($getValues[0]) ? "First slug: ".$getValues[0] : '';
    }
}
于 2012-12-07T08:42:34.540 に答える