Php ZF2和x2B;Doctrine2-表格及;绑定实体-参数为Null
在使用一个ZF2控制器时,出现以下错误: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
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
类中…所以我的所有实体都会得到它…如果它不工作,我会得到一个错误。。。