在我的Symfony2项目中,我试图动态生成我的表单类型中使用的实体,绕过使用查询构建器等。
对于实体选择属性,我提供了一个要使用的实体数组。在页面加载一切似乎都很好,并显示正确的内容。但是在表单提交上我得到了
isset中的非法偏移类型或EntityChoiceList.php第273行中的空白
at ErrorHandler ->handle ('2', 'Illegal offset type in isset or empty',
'..../Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php', '273', array('key' => object(myEntity))) in ..../Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php at line 273
.....
return isset($entities[$key]) ? $entities[$key] : null;
.....
如果我添加var_dump(isset($ this-> entities [$ key])),我会感到难过;退出;在这一行之上,我返回'bool(true)',这对我来说意味着密钥确实存在。
作为背景,我试图扩展EntityType,以便在我的项目中轻松添加:
public function getDefaultOptions(array $options)
{
$defaultOptions = array(
'em' => null,
'class' => 'Acme\TestBundle\Entity\myEntity',
'property' => null,
'query_builder' => null,
'choices' => $this->myEntityArray,
);
$options = array_replace($defaultOptions, $options);
$defaults = parent::getDefaultOptions($options);
return $defaults;
}
有没有任何想法为什么我会收到此错误,或者我是否仍然认为我的问题完全错了,尝试将一组实体传递给选择?
答案 0 :(得分:54)
如果您在尝试从ArrayCollection中删除元素时遇到此问题,可能是因为您输入了:
$list->remove($item)
代替$list->removeElement($item)
答案 1 :(得分:-1)
我猜你已经用其他方式解决了这个问题,这也不是一个真正的答案。
但我猜测$ entity不是该点上的数组,或者$ key不是标量值。 对于调试,您应该使用:
<?php
if (!is_array($entities) || !is_scalar($key)) {
var_dump($key, $entities));exit;
}
你现在如何测试它,它将停止在该函数的第一次传递。 Symfony Forms使用退出很多递归,因此任何函数的退出通常都无法帮助你。