Symfony2路由要求结合2个参数



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

requirements:
    var1: d+
    var2: d+

都是单独检查且有效的。我需要检查这两个的组合,因为这个组合并不总是有效的。

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

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

或者最好的解决方案是:

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

所以我理解你的问题,你想要以下内容:

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

Symfony2 Routing组件本身不会这样做,但是你可以扩展它。

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

我采用的最终解决方案如下:

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

所有这些都与我在最初的问题中发布的非常相似。

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

最新更新