2017-06-16 67 views
5

Używam Symfony 3 i utworzyłem niestandardową klasę Voter.Jak używać stałych klas w adnotacjach @Security przy użyciu języka Symfony Expression Language?

Chcę uzyskać do niego dostęp za pomocą znacznika SensioFrameworkExtraBundle@Security.

To rodzaj prac.

Gdybym nie następujące działa idealnie:

/** 
* @Rest\Get("organisation/{id}") 
* @Security("is_granted('OrgAdmin', id)") 
* @param int  $id 
* @param Request $request 
* 
* @return View 
*/ 
public function getOrganisationAction($id, Request $request) 
{ 

Ale nie podoba mi się pomysł wykorzystania magiczne ciągi we wniosku, a ja dużo raczej użyć klasy stały na czeku.

coś takiego:

/** 
* @Rest\Get("organisation/{id}") 
* @Security("is_granted(AppBundle\OrgRoles::ROLE_ADMIN, id)") 
* @param int  $id 
* @param Request $request 
* 
* @return View 
*/ 
public function getOrganisationAction($id, Request $request) 
{ 

Ale gdy próbuję że pojawia się następujący komunikat o błędzie:

Unexpected character \"\\\" around position 20 for expression `is_granted(AppBundle\\OrgRoles::ROLE_ADMIN, id)`. 

który po Niecytowany, jest następujący:

Unexpected character "\" around position 20 for expression `is_granted(AppBundle\OrgRoles::ROLE_ADMIN, id)`. 

Tak Jestem na to zakłopotany.

Czy można to zrobić?

Wszelkie sugestie dotyczące lepszego sposobu na zrobienie tego?

Odpowiedz

6

Można korzystać z funkcji dostępnych w komponencie Expression Language constant():

@Security("is_granted(constant('\\Full\\Namespace\\To\\OrgRoles::ROLE_ADMIN'), id)") 
+0

Dzięki. To się udało! Jesteś legendą. – Jayd

+0

Serdecznie zapraszamy @Jayd! Pamiętaj, aby zaakceptować odpowiedź :-) –

+0

Zrobi. Oczekiwanie na timer na SO, aby pozwolić mi zaakceptować odpowiedź. :RE – Jayd