2013-03-15 162 views
10

哪些路由参数访问速度更快?从$this->getRequest()->get('param') symfony2获取路由参数(控制器参数vs请求)

  1. 认沽路由参数作为控制器参数
  2. 获取路由参数又是怎么回事请求对象?更好的方法是把请求对象作为控制器参数或者在控制器对象上调用getRequest()方法?

回答

15

有人可能会争辩说,因为你需要从容器中提取对象Request这是一种较慢的方法,但是我已经完成了这两者,差异可以忽略不计。当你需要Request对象时,最好把它作为控制器方法的参数,因为你会立即得到它,而且PHP Type Hinting会在体面的IDE中提供额外的信息(自动完成等等)(我个人推荐PHPStorm)。这也适用于其他控制器方法的参数,你会得到直接的变量,不需要从其他地方拉两次。

class SthController extends Controller 
    { 
    public function indexAction(Request $request, $arg1, $arg2) 
    { 
    // you have $request object with type hint and all goodness 
    } 
    } 
+0

Thx。那么怎么样将参数从控制器传递到树枝模板 - 哪种方式可以更快地传递来自控制器的参数,或者通过'{{app.request.get('name')}}'获取树枝模板中的参数? – NHG 2013-03-20 12:47:07

+0

至于性能,同样的规则适用('app.request.get'直接翻译成'$ container-> get('request') - > get('name')')。但是对于编码风格,你不应该依赖'app'变量,因为它在所有情况下都不可用(尝试使用ESI,模板包含或者几个月前将以与我相同的位置结束) - 最好的方法是在渲染模板请求之前发送需要计算的所有数据。 – 2013-03-21 07:36:51

-2

我想你应该使用getRequest()方法,因为它更加动态!

+0

'getRequest()'只是'$ this-> container-> get('request')'的快捷方式,但从操作参数中获取Request对象应该是首选的DI方法。 实际上,如果您将控制器用作服务,则不存在'getRequest()'方法。 – 2015-01-20 13:49:20