【问题标题】:Symfony2: form is not createdSymfony2:未创建表单
【发布时间】:2016-07-26 09:19:47
【问题描述】:

有一个表单可以创建链实体。

class ChainType extends AbstractType
{
    /**
    * @param FormBuilderInterface $builder
    * @param array $options
    */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, array('label' => 'Company name'))
            ->add('logoImageURL', TextType::class, array('label' => 'Company logo'));
    }

    /**
    * @param OptionsResolver $resolver
    */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'CoreBundle\Entity\Chain'
        ));
    }
}

这是创建表单和保存实体的 newAction

/**
* Creates a new Chain entity.
*
* @Route("/new", name="chain_new")
*/
public function newAction(Request $request)
{
    $chain = new Chain();
    $form = $this->createForm(ChainType::class, $chain);

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($chain);
        $em->flush();

        return $this->redirectToRoute('chain_show');
    }

    return $this->render(
        'AdminBundle:ChainPanel:new.html.twig',
        array('form' => $form->createView())
    );
}

这是一个创建表单的按钮

<button type="button" class="btn btn-primary">
    <a href="{{ path('chain_new') }}">
        Add Chain
    </a>
</button>

问题

当我单击“添加链”按钮时,不会创建表单,我只是被重定向到“链显示”路线。我的代码有什么问题?

更新 - 我的解决方案

在控制器中,我将 newAction 放在 showAction 之前。这个固定的问题。但是我找不到解释

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    我不确定您要做什么,但如果您尝试使用 ChainType 表单创建页面,您还应该为该页面创建一个模板,如下所示:

    .....
    
    {% block YOUR_BLOCK %}
        {{ form(form) }}
    {% endblock %}
    
    ......
    

    而且,您不必用button 标记包装a 标记,只需将class="btn btn-primary" 赋予该a 标记即可。

    【讨论】:

      【解决方案2】:

      您的问题是您正在使用保存新 Chain 对象的变量。请参阅下面的示例,这应该可以解决您的问题...

      public function newAction(Request $request)
      {
          $chain = new Chain();
          $form = $this->createForm(ChainType::class, $chain);
      
          $form->handleRequest($request);
          if ($form->isSubmitted() && $form->isValid()) {
              $chain = $form->getData();
      
              $em = $this->getDoctrine()->getManager();
              $em->persist($chain);
              $em->flush();
      
              return $this->redirectToRoute('chain_show');
          }
      
          return $this->render(
              'AdminBundle:ChainPanel:new.html.twig',
              array('form' => $form->createView())
          );
      }
      

      您还错误地创建了提交按钮。要测试它是否正常工作,只需使用(在您的 .twig.html 文件中):

      {{ form(form) }}
      

      【讨论】:

        【解决方案3】:

        有趣的是,我猜链接的 HTML 是错误的。您不应该将 button 包装到锚标记。有些浏览器不支持它。而是使用如下:

        <a href="{{ path('chain_new') }}" class="btn btn-primary">
            Add Chain
        </a>
        

        如果这不能解决您的问题,您是否看到单击链接时正在创建一个新实体?

        【讨论】:

          【解决方案4】:

          在控制器中,我将 newAction 放在 showAction 之前。这个固定的问题。但是我找不到解释

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-19
            相关资源
            最近更新 更多