Symfony controller route with requirements on uuid

Viewed 4166

I have an entity like this:

class Building
{
    /**
     * @var int
     *
     * @ORM\Column(name="id")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="UUID")
     * @Expose()
     */
    private $id;

    ....
}

I would like to know if there is a way to specify the requirements on uuid to separate two different url like this on rest API:

class BuildingController extends BaseController
{   
    /**
     *
     * @Rest\Get("/buildings/{id}", requirements={"id" = "\d+"})
     */
    public function getBuildingAction($id)
    {
        //code
    }

\d+ is correct for integer value but I would like to change It to uuid type because I have another route for example this:

 /**
 * @Rest\Get("/buildings/lot")
 */
public function getBuildingLotAction(Request $request)
{
    //code
}

Is possible to define uuid on requirements type?

Thanks

3 Answers

I have used like this. it was worked for me!

/**
    *  @Rest\Patch("stocks/{stock}", requirements={"stock" = "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"})
    */

There is other regex structures have give

@ORM\GeneratedValue(strategy="UUID") uses UUID V1 and thus you need to use this expression:

/**
 *
 * @Rest\Get("/buildings/{id}", requirements={"id" = "[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"})
 */
public function getBuildingAction($id)
{
    //code
}

If you want to catch any version of UUID you can use this "[0-9a-f]{8}-[0-9a-f]{4}-[1-6][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"

Related