如何在Symfony2中从路由传递参数到控制器

时间:2013-05-23 15:43:52

标签: symfony configuration routing

我正在研究Symfony2项目,并试图弄清楚如何将参数从路由配置传递到控制器。我知道我可以在路由配置中配置默认​​值,并使用函数声明中的相应var名称检索控制器中的值,但这不是我想要的。

我的用例如下。我的控制器中有一个标准方法,我想从2或3个不同的路径访问。根据要调用的路由,我想以不同方式“配置”该方法。我可以通过以下几种方式实现这一目标:

  1. 在我的控制器中,使用`$ this-> container-> get(“request”) - > get(“_ route”)检查路由名称,但这很难看,然后我硬编码到路线名称。将配置移动到控制器,这应该是逻辑 - 而不是配置。
  2. 创建一个基本控制器类,并为不同的路由子类化每个方法。然后,每个子类方法将在该方法中具有必要的配置。比#1更清洁,但仍然“重”,因为有多个类可以满足简单的需求,并且仍然可以将配置数据推送到业务逻辑中。
  3. 将配置数据放入路由配置中。在控制器中,根据需要访问配置数据。理想的解决方案,但不知道如何。
  4. 我可以使用route default数组来指定我的参数,但是必须确保使用正则表达式来确保在URL级别不会覆盖params(安全风险)。这是功能性的,但仍然有点cludgy而不是一个非常黑客。

    我认为必须有更好的方法来做到这一点,但我似乎无法弄明白。有没有办法从控制器访问路由对象,并访问不同的配置参数?

1 个答案:

答案 0 :(得分:0)

您可以从路由器服务中提取实际路由。类似的东西:

$routeName = $this->container->get("request")->get("_route");
$router = $this->container->get("router");
$route = $router->getRouteCollection()->get($routeName);

不确定这是否会是如此出色的设计。考虑将$ configName传递给您的控制器方法,在配置文件中添加一个具有相同名称的参数,然后使用getParameter访问它。这将消除等式中的路线。

类似的东西:

zayso_arbiter_import:
    pattern:  /import
    defaults: { _controller: ZaysoArbiterBundle:Import:index, configName: 'someConfigName' }

public function importAction(Request $request, $configName)