ZF2 + Doctrine2 - Form&绑定实体 - Params Null

时间:2013-07-24 22:32:22

标签: 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_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,则DB返回错误...为什么值为空?

这是我的控制器代码:http://pastebin.com/JVK5xE9r

这是我的实体:http://pastebin.com/NhtaBNW9

这是我的AbstractEntityhttp://pastebin.com/s4L7Cquu

这是我的表单:http://pastebin.com/t7Kmzfk5

这是我的AbstractFormhttp://pastebin.com/36WeyKBf

在问题中包含太多代码。

get()方法适用于实体,set()也适用于实体。但那是我唯一的问题!所以我想知道原因。

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

1 个答案:

答案 0 :(得分:2)

啊我想我现在面对的是你正在做的事情

 $quote = new \Application\Entity\Quote();

然后你正在使用

$form->bind($quote);

所以在为 $ quote 创建新对象时,您将获得空值。你在哪里使用

 $form->bind($quote);

此函数假定值已存在于 $ quote(object)中。通过练习 Bind()通常用于编辑某种形式。

因此,如果你要添加一些东西,你必须进行获取/设置或使用 exchangearray()或w / e似乎没问题。但是如果您要编辑,那么您必须获得Id并执行类似的操作

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

然后使用 bind()。使用这种方法,你不需要做 $ quote = new \ Application \ Entity \ Quote();