私はこの奇妙な問題を抱えています。私のカスタムThingTypeクラスの使用例です。symfonyカスタムフォーム奇妙なプロパティのアクセスエラー
->add('photos', 'namespace\Form\Type\ThingType', [
'required' => false,
])
フィールド名がphotos
すべてが期待通りに動作しますが、私は、のは、photosi
を言わせてエンティティを生成し実行し、フォームフィールドの名前を変更するには、私のエンティティのフィールドを変更した場合、このエラーがスローされている場合:
プロパティ "photosi"もメソッドのいずれも、 "addPhotosus()"/"removePhotosus()"、 "setPhotosi()"、 "photosi()"、 "__set()"または "__call()"のいずれも使用できません。クラス "AppBundle \ Entity \ Product"に公開アクセス権があります。
私のエンティティのゲッターメソッド名を生成しようとしているSymfonyの問題だと思います。このaddPhotosus
メソッド名が生成されるのはなぜですか?これをどうすれば解決できますか?
EDIT:
ユーザにデータを表示するとき、私はモデル変圧器を使用しています。
$builder->addModelTransformer(new CallbackTransformer(
function ($imagesAsText) {
if (!$imagesAsText) {
return null;
}
$newImages = [];
foreach($imagesAsText as $img) {
$newImages[] = $img->getID();
}
return implode(',', $newImages);
},
function ($textAsImages) use ($repo) {
$images = [];
foreach(explode(',', $textAsImages) as $imgID) {
$img = $repo->findOneById($imgID);
if ($img) {
$images[] = $img;
}
}
return $images;
}
));
実際のフィールドは、たとえば1,10,32,51
にとって内のエンティティIDを持つTextType ::クラスです。モデルトランスフォーマーは、このデータをエンティティに変換します。実際のフォームタイプはエンティティの一部であるため、 'data_class'を自分のフォームタイプに設定するのは無関係です。私はProduct
エンティティとPhoto
エンティティを持っていることを意味します、photos
はphoto
エンティティの配列です。だから私のThingTypeでは、data_class
私は、photo
またはproduct
を使用する必要がありますか?
おかげ
また、この子をマップにしたくない場合は、 'mapped' => falseを追加できます。 – Alsatian
私はTextType :: classを使用して、modelTransformerによって変換されたエンティティの配列を保持します。このエラーは 'data_class'を設定しようとしたときに表示されます 'フォームのビューデータはAppBundle \ Entity \ Productクラスのインスタンス、しかし、(n)文字列 ' – nacholibre
@nacholibre多分あなたはこのスレッドの質問とは関係がないので、いくつかのコードであなたの質問を更新するか、新しいものを作るべきでしょう。 – abdiel