在处理我的一个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
这是我的AbstractEntity:http://pastebin.com/s4L7Cquu
这是我的表格:http://pastebin.com/t7Kmzfk5
这是我的AbstractForm:http://pastebin.com/36WeyKBf
有太多的代码不能包含在问题中。
get()方法适用于实体,set()也适用于实体。但这是我唯一的问题!所以我想知道为什么。
如果有人能告诉我为什么不起作用,那就太好了!
发布于 2013-07-25 02:32:57
啊,我想我得到了你现在面对的,你所做的
$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 =新的$quote
https://stackoverflow.com/questions/17845959
复制相似问题