3

タグに基づいて記事をフィルタリングするフォームがあります。したがって、ユーザーはexample.com/news投稿データを使用してフィルタリングするタグ(tag1、tag2など)の送信にアクセスできます。これにより、フィルタリングされた記事が同じURLでページが再読み込みされます。

次のURLは、同じ記事を返します。example.com/news/tag1+tag2

どちらの方法も同じコントローラーを通過します。フォームを使用してタグでフィルタリングしたユーザーをexample.com/news/tag1+tag2URL形式にリダイレクトさせたいのですが。

これを行うための最良の方法は何ですか?検索コントローラーを介してすべてのタグフィルター要求を送信してから、へのリダイレクトを作成することexample.com/news/tag1+tag2でしょうか?

4

2 に答える 2

1

フィルタリングされたタグの最初の送信に基づいて検索を行うべきではないようです。一度検索コントローラーを通過してからリダイレクトすると、2回の検索を実行することになります。

ユーザーがフィルタリングするタグを送信する場合は、それらを使用てURLを作成し、フィルタリングされたタグを含むURLに直接リダイレクトします。同じ検索コントローラーに送信されると言ったので、その後、正しい検索が1回だけ開始され、ユーザーのURLは、最終結果になりたいものになります。

したがって、フィルタリングされたタグをから取得し$_POST、すぐに最終結果のURLにリダイレクトして、正しい検索をトリガーします。

偽性PHP

$valid_tags = array_filter($_POST['tags'], function($t) {
   // validate tags as alphanumeric (substitute the appropriate regex for your tag format)
   // this discards non-matching invalid tags.
   return preg_match('/^[a-z0-9]+$/i', $t);
});
// Don't forget to validate these tags in the search controller!
// Implode the tags (assuming they are received as an array) as a space separated string
// and urlencode() it
$tags = urlencode(implode(" ", $valid_tags));
header("Location: http://example.com/news/$tags");
exit();
于 2013-01-20T21:52:13.103 に答える
0
$tags = 'tag1+tag2';
header ('Location: /news/' . $tags);
exit;
于 2013-01-20T21:50:25.120 に答える