12

在我的 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]));exit; 在这一行上方,我返回了“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;
}    

有没有人知道为什么我会收到这个错误,或者我的问题是否都错了,试图将一组实体传递给选择?

4

2 回答 2

55

如果您在尝试从 ArrayCollection 中删除元素时遇到此问题,可能是因为您输入了:

$list->remove($item)代替$list->removeElement($item)

于 2014-04-08T03:06:59.043 回答
-1

我猜你已经以其他方式解决了这个问题,这也不是一个真正的答案。

但我猜要么 $entities 在这一点上不是一个数组,要么 $key 不是一个标量值。对于调试,您应该使用:

<?php
if (!is_array($entities) || !is_scalar($key)) {
    var_dump($key, $entities));exit;
}

您现在如何测试它,它将在该函数的第一次传递时停止。Symfony Forms 使用了很多递归,因此任何函数中的退出通常对您没有帮助。

于 2013-08-29T15:50:13.800 回答