什么是$ request->属性?

时间:2017-12-21 22:05:38

标签: php html symfony twig

我是 php 的新手,我不太明白属性是如何保存在$request中的。

我们正在使用一个Controller.php类,它包含将数据传输到html.twig的所有函数;一个Model.php类,它包含查询的所有函数以从数据库中获取数据;我们使用hig部分的Twig模板。

我知道,如果我想获得'user'的属性,我必须写:

$request->attributes->get('user'),因为在那里有一个数组'user',参数为'username''password'等。

但是这个属性'user'(或其他参数)如何在$request中出现?我需要通过属性访问更多数据,但首先我必须知道它们是如何保存在那里的。

谢谢!

3 个答案:

答案 0 :(得分:4)

attribues是由应用程序填充的Symfony Request对象的唯一参数包。所有其他参数包(例如requestqueryserver都会填充http请求数据。

attributes可以在应用程序生命周期的任何时候填充,但大多数情况下它将在kernel.request事件侦听器中完成。如果您尚未使用它们,请Docs explain more about event listenersbuilt in Symfony Kernel events

kernel.request事件背后的想法是在控制器之前调用它。它非常适合实现为所有请求调用的代码。例如,这是内置RouterListener添加路径路径参数作为请求属性的方式。因此,如果路径为/foo/{bar},则您可以使用$request->attributes->get('bar')访问路径占位符。 What happens in the RouteListener是:

// $parameters contains route path placeholders
$request->attributes->add($parameters);
unset($parameters['_route'], $parameters['_controller']);
$request->attributes->set('_route_params', $parameters);

如果您想为请求添加更多属性,则需要实现自己的事件侦听器。注册后,Symfony会自动调用它,您的属性将被填充。

答案 1 :(得分:0)

请求对象包含来自几个不同位置的数据。其中一些来自前端表单,框架还加载当前登录用户的数据和其他可能有用的服务器端变量。

要添加新内容,请执行以下操作: $request->attributes->set('attribute', 'value');

答案 2 :(得分:0)

我使用请求对象的属性来包含稍后需要的对象或参数。例如,您可以在接收请求的控制器功能上添加额外的信息,然后在提供内容的服务或事件或其他内容中使用该信息。

您可以在控制器操作中设置该信息,即具有关于请求子项的完整信息的控制器操作,并且您可以使用该信息使一般服务的行为适应特定情况的使用,这要归功于收到的信息。

您有更多信息Symfony Http foundation doc