Symfony2:表单未创建

时间:2016-07-26 09:19:48

标签: php forms symfony

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

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'
        ));
    }
}

这是一个用于创建表单和保存实体的新动作

/**
* 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>

问题

当我点击“添加链”按钮时,表单未创建,我只是重定向到'chain_show'路线。我的代码出了什么问题?

更新 - 我的解决方案

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

4 个答案:

答案 0 :(得分:1)

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

.....

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

......

并且,您也不必将a标记包含button标记,只需将class="btn btn-primary"提供给a标记即可。

答案 1 :(得分:0)

您的问题是您正在使用包含新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) }}

答案 2 :(得分:0)

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

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

如果这没有解决您的问题,您是否在点击链接时看到正在创建的新实体?

答案 3 :(得分:0)

在控制器中我将showAction放在showAction之前。这个问题固定了。但是我无法找到解释