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请求参数和路由参数,以及获取参数

从控制器 Symfony2 中的 URL 获取参数

如何在Zend Framework 2中访问路由,发布,获取等参数

Symfony2 Route 仅在整数时获取参数

如何在 Symfony2 中获取控制器的所有路由列表?

Symfony2:控制器中动作/路由的完整路径