1

在我的一个 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,数据库返回错误......为什么这些值是空的?

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

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

这是我的:http AbstractEntity: //pastebin.com/s4L7Cquu

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

这是我的:http AbstractForm: //pastebin.com/36WeyKBf

有太多代码无法将其包含在问题中。

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

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

4

1 回答 1

2

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

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

然后你正在使用

$form->bind($quote);

所以在为$quote创建一个新对象时,你会得到空值。你在哪里使用

 $form->bind($quote);

此函数假定值已经存在于$quote (object)中。通过实践Bind() 通常用于编辑某些表单。

因此,如果您要添加一些东西,您必须执行 Get/Set 或 Use exchangearray()或 w/e 对您来说似乎没问题。但是如果你要编辑,那么你必须得到 Id 并做这样的事情

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

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

于 2013-07-25T02:32:57.170 回答