3

私はこれを1時間以上理解しようとしてきましたが、進歩がありません...

次のフォームとその唯一のフィールドがあります。

<?php
$builder
        ->add('cars', 'collection', array(
            'type' => new CarType(),
            //'property_path' => '[cars]',
            'required' => false,
        ))
    ;

このフォームは配列を受け取り、1 つのキー「cars」が Car オブジェクトの配列を指します (これらは CarType() によって適切に処理されます)。

このフォームにデータを設定すると、プロパティ パスの解析エラーが表示され、プロパティ パス "[]" が無効で解析できないことが示されます。上記のproperty_pathオプションのコメントを外すと、同じエラーになることに注意してください(デフォルトを表示するためにそこに置いただけです)。

  1. [] のプロパティ パスを使用しているのはなぜですか?
  2. どうすればこれを修正できますか?

注: これは、PHP 5.4 を使用する 1 つの環境では問題なく動作し、私のすべての PHP 5.3 環境では失敗します。

助けてくれてありがとう。

詳しくは:

例外: 「プロパティ パス "[]" を解析できませんでした。予期しないトークン "[" が位置 0 にあります」

/vagrant/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyPath.php の 125 行目

4

2 に答える 2

3

同様の問題があり、この回避策を見つけました。これをあなたの例に適応させます。

フォームを使用していくつかの新しいCarオブジェクトを作成していたので、私の車には ID がありませんでした。私のCar->getId()メソッドは を返しnullました。getId()メソッドをこれに変更したとき:

public function getId() {
    return (int) $this->id;
}

0 が返されるようになったため、問題は解決しました。getId()おそらく、プロパティ パス[0]は有効ですが、有効で[]はありません。

于 2013-08-08T18:32:02.480 に答える
1

の戻り値はgetCars()通常、 typearrayではなくtype にする必要がありDoctrine\Common\Collections\ArrayCollectionます。

property_pathは、値を元のオブジェクトに取得/設定するためにフォームで使用されるプロパティを指定します。

フィールド名が「cars」の場合、デフォルトで「cars」になっています。

[]property_path の値を...でラップする必要はないことに注意してください。


[]PHP 5.3 は、PHP 5.4 で追加された短い配列構文をサポートしていません。

下位互換性のために、array()構文を使用する必要があります。

于 2013-06-26T19:52:21.777 に答える