3

我有一个简单的博客包,其中包含以下路线:

blog_post:
    pattern:  /blog/{year}/{month}/{filename}/
    defaults: { _controller: ProjectBlogBundle:Post:index }
    requirements:
        year: "[0-9]{4}"
        month: "[0-9]{2}"
        filename: "([^/.]+)"

匹配的 urlsymfony.local/blog/2012/04/hello-world/没有问题。但是由于某种原因,我无法使用 Request 类访问查询参数,如下所示:

use Symfony\Component\HttpFoundation\Request;

class PostController extends Controller
{
    /**
     * @Template()
     */
    public function indexAction(Request $request)
    {


    print_r($request->query->keys()); // outputs blank array
    print_r($request->request->keys()); // outputs blank array

    echo $request->get('filename'); // outputs hello-world

    ....

   }

谁能解释为什么我无法使用访问查询参数$request->query->get('filename');

先感谢您。

4

1 回答 1

7

因为$request->query只包含作为查询字符串传递的GET参数(仅参数)而不是那些定义为路由参数的参数(它们是从 解析的属性PATH_INFO

所以,你可以同时使用,

$request->attributes->get('parameterName');
$request->get('parameterName');

访问 url 参数。

实际上,在使用时$request->get('XXXX'),它会检查所有参数包($request->query、$request->request 和 $request->attributes),直到找到适合给定名称的参数。

于 2013-01-08T03:04:37.663 回答