たぶん何かが足りないかもしれませんが、Symfony2のルートでクエリ文字列パラメーターを定義して、コントローラーに渡すことができる方法がないようです。
たとえば、/blog/my-blog-post
(Symfony2の ルーティングドキュメント から)のようなURIを生成して次のルートに渡す代わりに:
# app/config/routing.yml
blog_show:
pattern: /blog/{slug}
defaults: { _controller: AcmeBlogBundle:Blog:show }
/blog?slug=my-blog-post
のようなURIを生成したいと思います。問題は、ルート構成ファイルでslug
パラメーターを定義する場所がどこにも見つからないことです(上記の{slug}のように)。
おそらくこれは意図的なものですが、クエリ文字列でGETパラメーターを操作するためのベストプラクティスは何ですか?
ドキュメントでは クエリ文字列を使用したURLの生成 でそれらについて言及していますが、コントローラーに渡す方法は?
それらの言及を見つけることができる場所は、 Symfony2およびHTTPの基礎 です。
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
// retrieve GET variables
$request->query->get('foo');
これは、コントローラー内でそれらを操作するためのベストプラクティスですか?
GET/POST Symfony\Bundle\FrameworkBundle\Controller\Controllerを拡張するコントローラーのパラメーターを操作するには:
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
...
}
ルーティング構成ファイルでクエリ文字列パラメーターを指定することはできません。コントローラーの$ requestオブジェクトから取得するだけです:$request->query->get('foo');
(存在しない場合はnull
になります)。
そして、与えられたパラメータでルートを生成するには、あなたの中でそれを行うことができますtwigそのようなテンプレート:
{{ path(route, query|merge({'page': 1})) }}
コントローラーでルートを生成したい場合、リンクしたドキュメントのようになります:
$router->generate('blog', array('page' => 2, 'category' => 'Symfony'));
ルートを生成します/blog/2?category=Symfony
(ルート定義に存在しないパラメーターは、クエリ文字列として渡されます)。