Eğer birden fazla controller veya method içinde @Route annotation için requirements özelliğinde herhangi bir kural uyguluyorsanız, kuralın değişmesi durumunda ileride malum problemler yaşayabilirsiniz. Bu problemi aşağıdaki şekilde çözebilirsiniz.


Problemli controller


Eğer ileride guid regex değişikliği gerekirse ve de bu regexi birden fazla yerde kullansaydınız, başınız ağrırdı. Sebebide malum!


namespace Application\FrontendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Response;

/**
* @Route("", service="application_frontend.controller.user")
*/
class UserController extends Controller
{
/**
* @param string $guid
*
* @Route("/user/{guid}", requirements={"guid"="([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}"})
* @Method({"GET"})
*
* @return Response
*/
public function getUserAction($guid)
{
// Do something with $guid
}
}

Temiz controller


namespace Application\FrontendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Response;
use Application\FrontendBundle\Validator\GuidAnnotation;

/**
* @Route("", service="application_frontend.controller.user")
*/
class UserController extends Controller
{
/**
* @param string $guid
*
* @Route("/user/{guid}", requirements={"guid"=GuidAnnotation::PATTERN})
* @Method({"GET"})
*
* @return Response
*/
public function getUserAction($guid)
{
// Do something with $guid
}
}

GuidAnnotation class


namespace Application\FrontendBundle\Validator;

class GuidAnnotation
{
const PATTERN = '([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}';
}