AbstractType
(ドクトリン永続) エンティティにマップするフォーム ( ) があります。
そのエンティティは、ドクトリンのタイプのフィールドを持っていますarray
。
symfony のドキュメントによると、フォーム コレクション フィールドを PHP の にマップできるはずですがarray
、フォームがエンティティにマップされている場合は機能しないようです。symfony はそのフィールドがリレーションであることを期待していますが、それは単にarray
.
これは実際のコードではなく、単なる例です。
この (ドクトリンに固執する) エンティティを考えてみましょう:
class Article
{
...
/**
* @ORM\Column(type="array")
*/
protected $tags;
...
}
そして、このエンティティ(ドクトリンによって管理されていません):
class Tag
{
...
public $name;
...
}
そして、このフォームタイプ:
class ArticleType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('tags', 'collection', array('type' => new TagType()));
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => '\Entity\Article',
);
}
}
タグのフォーム タイプ:
class TagType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name', 'text');
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => '\Entity\Tag',
);
}
}
ArticleType 教義をインスタンス化しようとすると、次のような文句が表示されます。
Expected argument of type "\Entity\Tag", "array" given
ファイル内:
vendor/symfony/src/Symfony/Component/Form/Extension/Core/DataMapper/PropertyPathMapper.php 行 47
独自のフィールド タイプを記述せずに、やりたいことを実行することはできますか?
更新: 質問を言い換える必要があるかもしれません: このフィールドを何にもマップしないように symfony に指示するにはどうすればよいですか?