所以我在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时,将其(部分)移动到存储库类或类似的东西中以防止代码/逻辑的重复可能是一个好主意。