0

Web ページのデータを 4 つのタグ ('a'、'b'、'c'、'd') でフィルタリングしたいと考えています。ユーザーがこのページにいるとしましょう:

/data/1/slug-for-one

ユーザーはデータを 'c' でフィルター処理する必要があり、'c' をクリックすると、セッション オブジェクトの var が変更され、同じページを 'リロード' している間にデータが正しくフィルター処理されます。

フィルター ボタンのリンクを作成するにはどうすればよいですか? フィルターを解析してリダイレクトする特別なコントローラーを作成しますか? コントローラーはリダイレクトする URL をどこで取得しますか? ユーザーが悪事を行う可能性があるため、GET ごとにルート/URL を渡したくありません。

編集:

コメントで指摘されているように、セッションでフィルターをストローするのは悪い考えです。では、フィルターを通過する最善の方法は何でしょうか? 実際のコントローラの前に解析できるルーティング プレフィックスを設定することは可能ですか?

例:

/filter/c/data/1/slug-for-one
4

1 に答える 1

0

POSTリクエストを使用して変数を送信し、カスタムアクションで処理できます。このようなもの:

<?php
// src/Acme/DemoBundle/Controller/DataController.php
namespace Acme\DemoBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
// ...

class DataController extends Controller
{
    /**
     * @Route("/data/{id}/{slug}")
     * @Method("POST")
     */
    public function filterAction($id, $slug)
    {
        $tag = $this->getRequest()->get('tag');

        // ... filter it by tag and 
    }
}
?>

またはif、リクエストがPOSTリクエストであるかどうかを確認する現在のアクションを作成し、それをフィルタリングします。

<?php
if ('POST' == $this->getRequest()->getMethod()) {
    // ... filter
}
?>
于 2012-07-20T21:49:38.700 に答える