21

何かが足りないかもしれませんが、Symfony2のルートでクエリ文字列パラメーターを定義してコントローラーに渡す方法がないようです。

たとえば、/blog/my-blog-post(Symfony2のルーティングドキュメントから)のようなURIを生成し、それを次のルートに渡す代わりに:

# app/config/routing.yml    
blog_show:
    pattern:   /blog/{slug}
    defaults:  { _controller: AcmeBlogBundle:Blog:show }

のようなURIを生成したいと思い/blog?slug=my-blog-postます。問題は、ルート構成ファイルでパラメーターを定義する場所が見つからないことslugです(上記の{slug}の対応物のように)。

おそらくこれは意図的なものですが、クエリ文字列でGETパラメータを操作するためのベストプラクティスは何ですか?

ドキュメントでは、クエリ文字列を使用したURLの生成でそれらについて言及しているので、それらをコントローラーに渡す方法は?

それらについての言及を見つけることができるのは、Symfony2とHTTPの基礎です:

use Symfony\Component\HttpFoundation\Request;

$request = Request::createFromGlobals();

// retrieve GET variables
$request->query->get('foo');

これは、コントローラー内でそれらを操作するためのベストプラクティスですか?

4

2 に答える 2

47

Symfony \ Bundle \ FrameworkBundle \ Controller\Controllerを拡張するコントローラーでGET/POSTパラメーターを操作するには:

public function updateAction()
{
    $request = $this->getRequest();
    $request->query->get('myParam'); // get a $_GET parameter
    $request->request->get('myParam'); // get a $_POST parameter
    ...
}

Symfonyベースコントローラーを拡張しないコントローラーの場合、リクエストオブジェクトをアクションメソッドのパラメーターとして宣言し、上記のように進めます。

public function updateAction(Request $request)
{
    $request->query->get('myParam'); // get a $_GET parameter
    $request->request->get('myParam'); // get a $_POST parameter
    ...
}
于 2012-07-23T21:39:52.847 に答える
29

ルーティング構成ファイルでクエリ文字列パラメータを指定することはできません。コントローラの$requestオブジェクトから取得するだけです:(存在しない場合はそうなります)$request->query->get('foo'); null

そして、与えられたパラメータでルートを生成するために、あなたはそのようなあなたの小枝テンプレートでそれをすることができます:

{{ path(route, query|merge({'page': 1})) }}

コントローラでルートを生成する場合は、リンクしたドキュメントと同じです。

$router->generate('blog', array('page' => 2, 'category' => 'Symfony'));

ルートを生成します/blog/2?category=Symfony(ルート定義に存在しないパラメーターはクエリ文字列として渡されます)。

于 2012-07-23T21:29:57.680 に答える