我是 php 的新手,我不太明白属性是如何保存在$request
中的。
我们正在使用一个Controller.php类,它包含将数据传输到html.twig的所有函数;一个Model.php类,它包含查询的所有函数以从数据库中获取数据;我们使用hig部分的Twig模板。
我知道,如果我想获得'user'
的属性,我必须写:
$request->attributes->get('user')
,因为在那里有一个数组'user'
,参数为'username'
,'password'
等。
但是这个属性'user'
(或其他参数)如何在$request
中出现?我需要通过属性访问更多数据,但首先我必须知道它们是如何保存在那里的。
谢谢!
答案 0 :(得分:4)
attribues
是由应用程序填充的Symfony Request对象的唯一参数包。所有其他参数包(例如request
,query
,server
都会填充http请求数据。
attributes
可以在应用程序生命周期的任何时候填充,但大多数情况下它将在kernel.request
事件侦听器中完成。如果您尚未使用它们,请Docs explain more about event listeners和built 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)
我使用请求对象的属性来包含稍后需要的对象或参数。例如,您可以在接收请求的控制器功能上添加额外的信息,然后在提供内容的服务或事件或其他内容中使用该信息。
您可以在控制器操作中设置该信息,即具有关于请求子项的完整信息的控制器操作,并且您可以使用该信息使一般服务的行为适应特定情况的使用,这要归功于收到的信息。