0

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

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

  1. 在我的控制器中,使用 `$this->container->get("request")->get("_route") 检查路由名称,但这很难看,然后我被硬编码为路由名称。将配置移动到控制器,这应该只是逻辑而不是配置。
  2. 创建一个基本控制器类,并为我的不同路由子类化每个方法。然后,每个子类方法都将在该方法中具有必要的配置。比 #1 更清洁的解决方案,但在具有多个类以满足简单需求的意义上仍然“重”,并且仍然将配置数据推送到业务逻辑中。
  3. 将配置数据放入路由配置中。在控制器中,根据需要访问配置数据。理想的解决方案,但不知道如何。

我可以使用路由默认数组来指定我的参数,但必须确保使用正则表达式来确保参数不会在 URL 级别被覆盖(安全风险)。这是功能性的,但仍然有点笨拙,而不是一个漂亮的黑客。

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

4

1 回答 1

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)
于 2013-05-23T16:29:12.460 回答