12

Symfony2 プロジェクト内で、クエリ ビルダーなどの使用をバイパスして、フォーム タイプ内で使用されるエンティティを動的に生成しようとしました。

エンティティの選択プロパティには、使用するエンティティの配列を指定しています。ページの読み込み時にすべて問題なく表示され、正しいコンテンツが表示されます。ただし、フォームの送信時に取得します

EntityChoiceList.php 行 273 の isset または空のオフセット タイプが不正です

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

-1

あなたはすでにこれを別の方法で解決していると思いますが、これも本当の答えではありません。

しかし、その時点で $entities が配列ではないか、$key がスカラー値ではないかのいずれかだと思います。デバッグには、次を使用する必要があります。

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

これをどのようにテストしたかというと、その関数の最初のパスで停止します。Symfony フォームは多くの再帰を使用して終了するため、通常、どの関数でも終了しても役に立ちません。

于 2013-08-29T15:50:13.800 に答える