У меня есть страница с формой, и я хочу знать, возможно ли получить к ней доступ с помощью GET, но разрешить только зарегистрированным пользователям отправлять на нее сообщения POST.
Я знаю, что это можно сделать в security.yml, но я не уверен, как это сделать с аннотациями.
/**
* @param Request $request
* @return Response
* @Security("has_role('ROLE_USER')")
* @Method(methods={"POST"})
*/
public function calculatorAction(Request $request)
{
$form=$this->createForm(new CallRequestType(),$callReq=new CallRequest());$form->handleRequest($request);
if($form->isValid()){
//blabla
}return $this->render('MyBundle:Pages:calculator.html.twig', array('form' => $form));
}
Это защитит всю функцию, но я хочу получить к ней доступ, только не POST к ней без входа в систему. Альтернативой может быть проверка того, есть ли вошедший в систему пользователь в скобках $ form-> isValid (). Но мне все еще интересно, можно ли это сделать с помощью аннотаций.
Вы могли бы сделать что-то вроде этого.
Вы можете разрешить оба типа методов анонимно и проверять только внутри контроллера, чтобы увидеть, аутентифицирован ли пользователь и выполняет ли он POST.
(Вы не указываете, какую версию Symfony вы используете, поэтому вам, возможно, придется заменить authorization_checker
(2.8) для пожилых security.context
оказание услуг)
/**
* @param Request $request
* @return Response
*
* @Route("/someroute", name="something")
* @Method(methods={"POST", "GET"})
*/
public function calculatorAction(Request $request)
{
if ( !$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY') && $request->getMethod() == 'POST') {
throw new AccessDeniedHttpException();
}$form=$this->createForm(new CallRequestType(),$callReq=new CallRequest());$form->handleRequest($request);
// you also need to check submitted or youll fire the validation on every run through.
if($form->isSubmitted() && $form->isValid()){
//blabla
}return $this->render('MyBundle:Pages:calculator.html.twig', array('form' => $form));
}
Других решений пока нет …