什么是$ request->属性?

问题描述 投票:0回答:3

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

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

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

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

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

谢谢!

php html symfony twig
3个回答
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会自动调用它,您的属性将被填充。


0
投票

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

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


0
投票

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

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

你在这里有更多信息Symfony Http foundation doc

© www.soinside.com 2019 - 2024. All rights reserved.