3

主に学習目的で、単純なフロントコントローラーに取り組んでいます。

Symfony がルーティングを行う方法が気に入っています。このようにマップにパターンを持ち、/news/{category}/{id}カテゴリと ID 変数をコントローラーに渡します。しかし、私の問題は、RegEx を使用する能力がないため、パターンを URI に一致させる方法がわからないことです。

どのように合わせたらよいでしょうか

/news/{category}/{id}

/news/tech/5784

次のようなパターンを許可する必要があります: /news/*- どこが*すべてに一致しますか? または、このように、変数がいくつかのゴミと混ざっている場所は/news/{category}_ex/14{id}?

変数と値を取得することは大した問題ではありませんが、マッチングのための正規表現を書くことは問題です。

事前にご協力いただきありがとうございます

4

2 に答える 2

4

最も簡単なのは、(正規表現)名前付きサブパターンを使用することです。

$regex = '#^/news/(?P<category>[a-z0-9]+)/(?P<id>[0-9]+)$#';
$path  = '/news/tech/5784';

if (preg_match($regex, $path, $matches))
{
    $matches['category'] === 'tech';
    $matches['id']       === '5784';
}
于 2012-10-29T21:34:36.870 に答える
1

PHP サブパターンを探している可能性が最も高いです。

$str = '/news/tech/5784';
if (preg_match('~^/news/(?<category>[^/]+)/(?<id>[^/]+)~', $str, $match))
   echo $match['category'] . " - " . $match['id'] . "\n";

出力:

tech - 5784
于 2012-10-29T21:34:58.227 に答える