Php ZF2和x2B;Doctrine2-表格及;绑定实体-参数为Null

Php ZF2和x2B;Doctrine2-表格及;绑定实体-参数为Null,php,doctrine-orm,entity,zend-framework2,zend-form,Php,Doctrine Orm,Entity,Zend Framework2,Zend Form,在使用一个ZF2控制器时,出现以下错误: Doctrine\DBAL\DBALException File: /var/www/microweb2/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:47 Message: An exception occurred while executing 'INSERT INTO quotes (name, email, phone_number, budget, content, date

在使用一个ZF2控制器时,出现以下错误:

Doctrine\DBAL\DBALException
File: /var/www/microweb2/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:47
Message: An exception occurred while executing 'INSERT INTO quotes (name, email, phone_number, budget, content, date_posted, service_id) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [null, null, null, null, null, null, null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
嗯,这似乎是一个相当基本的错误,但我找不到解决办法。这个过程是这样的:我创建表单来显示它,然后用一个实体
Application\entity\Quote
绑定它。然后我用一个
DoctrineHydrator
设置水合器。如果请求是
POST
,我将用请求值设置表单值,并用InputFilter验证它们。不幸的是,如果
isValid()
返回
true
,数据库将返回错误。。。为什么值为空

这是我的控制器代码:

这是我的实体:

这是我的
抽象实体

这是我的表格:

这是我的
摘要表单

问题中包含的代码太多了

get()
方法适用于实体,而
set()
方法也适用于实体。但这是我唯一的问题!所以我想知道为什么


如果有人能告诉我为什么它不起作用,那就太好了

啊,我想我明白了你现在面临的,你正在做的是

 $quote = new \Application\Entity\Quote();
然后你使用

$form->bind($quote);
 $form->bind($quote);
因此,在为$quote创建新对象时,您将得到空值。你在哪里使用

$form->bind($quote);
 $form->bind($quote);
此函数假定值已存在于$quote(对象)中。实际上,Bind()通常用于编辑某些表单

因此,如果您要添加某些内容,则必须执行Get/Set或使用exchangearray()或w/e。但如果您要编辑,则必须获取Id并执行类似操作

 $quote=$em(this is GetEntityManagerObject)->getRepository->find($id);

然后使用bind()。使用这种方法,您不需要执行$quote=new\Application\Entity\quote()

请将您的控制器以及实体发布在此处,我无法打开这些链接,如果您在此处发布代码,我可能会帮助您。我尝试使用
setOptions()
方法(本质上是
exchangeArray())
但它不起作用…仍然将参数设置为
NULL
…还有其他想法吗?这是我的新控制器代码:我不知道为什么要在实体对象上使用setOptions(),setOptions()是表单对象。所以你需要用表单调用它。好吧,这是我交换的方式…我更喜欢使用
setOptions()
,它做同样的事情:p
公共函数setOptions($options=array()){foreach($propertyName=>$propertyValue的选项){$methodName='set'。ucfirst($propertyName);if(method_存在($this,$methodName)){$this->$methodName($propertyValue);}return$this;}
我刚刚检查了您的实体,您的实体中没有SetOptions(),请更新您的代码,以便您的上述方法可以在那里工作。$quote->SetOptions($form->getData());表示您正在从实体调用函数,而我在那里看不到任何函数。
SetOptions()
方法在
AbstractEntity
类中…所以我的所有实体都会得到它…如果它不工作,我会得到一个错误。。。