Symfony2获取路由参数(控制器参数vs请求)

10

获取路由参数的哪种方法更快?

  1. 将路由参数放置在控制器参数中
  2. $this->getRequest()->get('param') 获取路由参数

那么请求对象呢?更好的方式是将请求对象放置在控制器参数中还是在控制器对象上调用 getRequest() 方法?

2个回答

15

有人可能会认为,由于您需要从容器中提取Request对象,这是一种较慢的方法,但我已经尝试过两种方法,它们之间的差异可以忽略不计。当您需要Request对象时,最好将其作为控制器方法参数放置,因为这样您将立即拥有它,并且PHP类型提示将在像PHPStorm这样的良好IDE中提供其他信息(自动完成等)。这也适用于其他控制器方法参数,您将直接获得变量,无需从其他地方再次提取它们。

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模板中获取参数? - NHG
关于性能,同样的规则适用(app.request.get 直接翻译成 $container->get('request')->get('name'))。但是对于编码风格,你不应该依赖 app 变量,因为它在所有情况下都不可用(尝试使用 ESI、模板包含等进行实验,你会像我几个月前一样陷入同样的境地)——最好的方法是在渲染模板请求之前发送所有需要计算的数据。 - Tomasz Kowalczyk

-1

我认为你应该使用getRequest()方法,因为它更具有动态性!


getRequest()仅是$this->container->get('request')的快捷方式,但通过操作参数获取Request对象是DI方法,可能更值得推荐。实际上,如果您将控制器作为服务使用,则没有getRequest()方法。 - Petr Peller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接