【问题标题】:Form with CSRF token only仅带有 CSRF 令牌的表单
【发布时间】:2019-07-01 15:53:28
【问题描述】:

我有一个只需要 CRSF 令牌的表格。 其他参数由 URL 本身提供,或者是默认值。

/**
 * @Route("/projets/projet-{projetId}/accessoires/accessoire-{accessoireId}/new/", name="projetaccessoire_new")
 * @ParamConverter("projet", options={"mapping"={"projetId"="id"}})
 * @ParamConverter("accessoire", options={"mapping"={"accessoireId"="id"}})
 * @Method({"POST")
 *
 * @param Request $request
 * @param Projet $projet
 * @param Accessoire $accessoire
 * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
 */
public function newAction(Request $request, Projet $projet, Accessoire $accessoire) {
    $projetAccessoire=new ProjetAccessoire();
    $form=$this->createForm(ProjetAccessoireType::class, $projetAccessoire, array(
        'action'=>$this->generateUrl('projetaccessoire_new', array('projetId'=>$projet->getId(), 'accessoireId'=>$accessoire->getId())),
        'method'=>'POST',
    ));
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid()) {
        $projetAccessoire->setProjets($projet)
                         ->setAccessoires($accessoire)
                         ->setPosX(0)
                         ->setPosY(0)
                         ->setRotZ(0);

        $em=$this->getDoctrine()->getManager();
        $em->persist($projetAccessoire);
        $em->flush();

        return $this->json(array(
            'message_info'=>array(
                array(
                    'message'=>'Projet enregistré',
                    'type'=>'success',
                ),
            ),
        ));
    }

    return $this->render($this->path.'projetaccessoire_new.html.twig', array(
        'projet'=>$projet,
        'accessoire'=>$accessoire,
        'projetAccessoire'=>$projetAccessoire,
        'form'=>$form->createView(),
    ));
}

问题是,我应该在ProjetAccessoireType 中输入什么才能只有 CRSF 令牌。
谁能给我一个代码示例?

【问题讨论】:

    标签: symfony symfony-forms symfony-3.4


    【解决方案1】:

    我只想要 csrf 令牌不是更容易创建没有数据类的表单吗?

    https://symfony.com/doc/current/form/without_class.html

    【讨论】:

      【解决方案2】:

      对于您想要做的事情,您不需要专用的表单类型。只需使用基本类型:

      use Symfony\Component\Form\Extension\Core\Type\FormType;
      
      // ...
      $form = $this->createForm(FormType::class);
      
      // or
      $form = $this->createFormBuilder()->getForm();
      

      这将呈现一个只有隐藏 crsf-token 输入的空表单。

      【讨论】:

        猜你喜欢
        • 2020-03-22
        • 2016-12-16
        • 2011-12-11
        • 2020-03-04
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        相关资源
        最近更新 更多