symfony2路由要求结合2个参数

时间:2013-05-10 11:36:05

标签: symfony routing requirements symfony-2.3

所以我在routing.yml中得到了这个:

requirements:
    var1: \d+
    var2: \d+

两者都是自己检查并且有效。 我需要检查2的组合,因为组合并不总是有效。

对于这种情况,我需要检查数据库中2个对象之间的关系,第一个应该是第二个对象的父对象。 我可以在控制器中执行此操作,但我并不喜欢该实现。另外,我需要对超过1条路线进行同样的检查。

我如何添加另一项检查组合的要求?我可以在控制器类中定义一个可以调用的方法吗?

或者最好的解决方案是:

public function indexAction($var1, $var2)
{
    $result = $this->checkRelation($var1, $var2);
    if ($result) {
        // return errorpage
        return $result;
    }

    // ... 
}

2 个答案:

答案 0 :(得分:0)

因此,我理解您的问题,您需要以下内容:

/parent/child/        --> returns 200
/not_parent/not_child --> returns 404

Symfony2路由组件本身不会这样做,但您可以扩展它。

http://symfony.com/doc/master/cmf/cookbook/using-a-custom-route-repository.html

答案 1 :(得分:0)

我接下来的最终解决方案如下:

  • 添加需要所有参数的方法checkRelation
  • 在该方法中运行查询以检查一切是否正常。
  • 出现问题时返回false,值正常时返回true。 (或者你可以返回一个物体或其他东西)
  • 在动作中我检查该值是否为false,如果是,我返回一个通用"未找到"特定控制器的页面。

这一切与我在最初的问题中发布的内容非常相似。

在多个控制器中使用相同的checkRelation时,最好将其(部分)移动到存储库类或类似的东西,以防止重复代码/逻辑。