symfony2 获取路由参数(控制器参数与请求)
Posted
技术标签:
【中文标题】symfony2 获取路由参数(控制器参数与请求)【英文标题】:symfony2 getting route parameters (controller arguments vs request) 【发布时间】:2013-03-04 16:54:54 【问题描述】:哪个访问路由参数更快?
-
将路由参数作为控制器参数
从
$this->getRequest()->get('param')
获取路由参数
那么请求对象呢?更好的方法是将请求对象作为控制器参数或在控制器对象上调用getRequest()
方法?
【问题讨论】:
【参考方案1】:有人可能会争辩说,由于您需要从容器中拉出 Request
对象,因此它的方法较慢,但我两者都做了,差异可以忽略不计。当您需要 Request
对象时,最好将其作为控制器方法参数,因为您将立即拥有它,并且 php 类型提示将在体面的 IDE 中提供附加信息(自动完成等)(我个人推荐 PHPStorm)。这也适用于其他控制器方法参数,给你直接变量,不需要从其他地方拉两次。
class SthController extends Controller
public function indexAction(Request $request, $arg1, $arg2)
// you have $request object with type hint and all goodness
【讨论】:
谢谢。以及将参数从控制器传递到 twig 模板怎么样 - 哪种方式可以更快地从控制器传递参数,或者通过 app.request.get('name')
获取 twig 模板中的参数?
至于性能,同样的规则适用(app.request.get
直接转换为类似$container->get('request')->get('name')
的东西)。但是对于编码风格,您不应该依赖app
变量,因为它并非在所有情况下都可用(尝试使用 ESI,模板包含等等,您将在几个月前与我相同的位置结束) - 最好方法是在渲染模板请求之前发送您需要计算的所有数据。【参考方案2】:
我认为你应该使用 getRequest() 方法,因为它更动态!
【讨论】:
getRequest()
只是$this->container->get('request')
的快捷方式,但从操作参数获取请求对象是可能应该首选的 DI 方法。事实上,如果您将控制器用作服务,则没有 getRequest()
方法。以上是关于symfony2 获取路由参数(控制器参数与请求)的主要内容,如果未能解决你的问题,请参考以下文章
laravel-4-laravel请求参数和路由参数,以及获取参数