Подтвердить что ты не робот

Недопустимый тип смещения в isset или пустой в строке EntityChoiceList.php 273

В моем проекте 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;
}    

Есть ли у кого-нибудь идеи, почему я получаю эту ошибку, или я все-таки делаю ошибку во всех ошибках, пытаясь передать массив сущностей на выбор?

4b9b3361

Ответ 1

Если вы получаете это, пытаясь удалить элемент из ArrayCollection, вероятно, потому, что вы набрали:

$list->remove($item) вместо $list->removeElement($item)

Ответ 2

Я предполагаю, что вы уже решили это по-другому, и это тоже не реальный ответ.

Но я предполагаю, что либо $entity не является массивом в этой точке, либо $key не является скалярным значением. Для отладки вы должны использовать:

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

Как вы теперь протестировали это, он остановится на первом проходе в этой функции. Symfony Forms использует много рекурсии, поэтому выход из любой функции обычно не помогает вам.