我有一个带有表单的页面,想知道是否可以使用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()中是否有登录用户托架。但我仍然想知道是否可以用注释完成。
答案 0 :(得分:2)
你可以这样做。
您可以匿名允许这两种方法类型,并在控制器内部检查以查看用户是否经过身份验证并正在进行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));
}