正如您在下面看到的,我的@Route->requirements
正则表达式(我在许多其他控制器/方法中使用它)有点长,看起来不是很好而且最重要的是 将来很难在语法更新的情况下进行维护,所以问题是,我们是否可以执行类似下面的操作?
我已经看过许多类似的问题和教程,用于创建自定义注释,但不是像这个问题。
当前
/**
* @param string $id
*
* @Method({"GET"})
* @Route("/class/{id}", requirements={"id"="([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}"})
* @Secure(roles="ROLE_ADMIN")
*
* @return Response
*/
public function getClassAction($id)
可能有点像这样
/**
* @param string $id
*
* @Method({"GET"})
* @Route("/class/{id}", requirements={"id"="MyClass::MyValidation"})
* @Secure(roles="ROLE_ADMIN")
*
* @return Response
*/
public function getClassAction($id)
MyClass的
MyClass
{
// Would be ideal to stick this into parameters.yml though
const ID = "([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}";
public function MyValidation($value)
{
if (!preg_match(self::ID, $value)) {
return 'Bad ID';
}
return true;
}
}
答案 0 :(得分:2)
您应该直接使用该模式,如下所示:
<?php
use X\Y\Z\MyClass;
class XYZ
{
/**
* @param string $id
*
* @Method({"GET"})
* @Route("/class/{id}", requirements={"id":MyClass::ID})
* @Secure(roles="ROLE_ADMIN")
*
* @return Response
*/
public function getClassAction($id)
答案 1 :(得分:0)
我建议改用@ParamConverter
注释。在这种情况下,您不需要验证。有关详细信息ParamConverter
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
/**
* @Route("/blog/{id}")
* @ParamConverter("post", class="SensioBlogBundle:Post")
*/
public function showAction(Post $post)
{
}