这是我第一次尝试将产品信息存储到mysql中。如果代码没有处于最佳状态,我提前道歉,我仍在学习。这是我的registration.html.trick
{% 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 %}
我还有一个带有setters&getters,由于代码量的原因,这里不包括它。
这是我的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
。有人能检查一下我的代码并给出错误的反馈吗?我现在真的很迷茫,不知道下一步该怎么办,也不知道如何解决这个问题。提前谢谢。
-
您的表单字段没有设置
name
属性,这意味着不会从中发布任何数据 -
在控制器中,
$product
应该是AppBundle'Entity'Product
的实例,而不仅仅是类名:$product = new 'AppBundle'Entity'Product();
-
表单不会自动从HTTP请求中检索数据(因为第1点而不存在),您必须手动处理请求:
// inject the request here public function createAction('Symfony'Component'HttpFoundation'Request $request) { // ... $form->handleRequest($request); if ($form->isValid()) { // ... } }