Symfony3尝试使用表单和树枝保存到数据库

时间:2016-07-22 13:15:20

标签: php mysql forms twig symfony

这是我第一次尝试将产品信息存储到mysql中。如果代码不是最好的形式,我提前道歉,我还在学习。这是我的 registration.html.twig

{% extends 'base.html.twig' %}

    {% block stylesheets %}
        <link href="{{ asset('bundles/framework/css/myStyle.css') }}" rel="stylesheet" />
    {% endblock %}

{% block title %}Create your product {% endblock %}


{% block body %}
    <div id="container">
    <h1 id="header">Create your product and store it in the database!</h1>
    </div>

    <form method="POST" id="registrationForm">
    <input type="text" id="pName" placeholder="Product name">
        <input type="text" id="pPrice" placeholder="Product price"> <br>
        <textarea id="pDescription" placeholder="Product description"></textarea>
    </form>
    <input type="submit" value="Submit" >

{% endblock %}

我还有产品实体类,其中包含setter和amp; getter,因为代码量不会在此处包含它。

这是我的 ProductForm

class ProductForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
       $builder
           ->add('pName')
           ->add('pPrice')
           ->add('pDescription')
       ;
    }
}

这是 / insert 页面控制器的一部分:

public function createAction()
    {
        $product = 'AppBundle\Entity\Product';
        $form = $this->createForm(ProductForm::class, $product);

        if($form->isValid())
        {
            $em= $this->getDoctrine()->getManager();
            //Save into database code should go here...
        }
    }

对于初学者来说,它抱怨它Expected argument of type "object, array or empty", "string" given我猜是来自控制器,我试图将$product变量与指定路径传递给实体类。在文档中,这部分非常令人困惑。它说$product = ...让我没有任何东西,我设法理解这是实体类的路径,应该传递给createForm方法,但如前所述,它抱怨它是string ,而不是array。有人可以审查我的代码并提供有关错误的反馈吗?我现在真的输了,不知道接下来要做什么,或者如何解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:2)

  1. 您的表单字段未设置name个属性,这意味着不会从中发布任何数据。

  2. 在控制器中,$product应该是AppBundle\Entity\Product的实例,而不仅仅是类名:

    $product = new \AppBundle\Entity\Product();
    
  3. 表单不会自动从HTTP请求中检索数据(因为第1点而不存在),您必须手动处理请求:

    // inject the request here
    public function createAction(\Symfony\Component\HttpFoundation\Request $request)        {
        // ... 
        $form->handleRequest($request);
        if ($form->isValid()) {
            // ...
        }
    }