私は、エンティティファイルとの双方向のoneToMany関係を持つDoctrineエンティティドキュメントを持っています。したがって、1つのドキュメントには複数のファイルエンティティを含めることができますsymfonyフォームのエンティティの追加と削除
今、ドキュメントからファイルを追加したり削除したりできるsymfonyフォームを作りたいと思います。私はCollectionTypeは経由のDocumentTypeに含まれているのFileTypeを設定します。
//DocumentType.php
$builder->add('files', Type\CollectionType::class, ['entry_type' => FileType::class])
//FileType.php
$builder->add('id', Type\HiddenType::class);
Iは、ファイルIDを持つ隠しフィールドを取得するこの方法。 DocumentからFileを削除する必要がある場合、JSを介してフィールドを無効にしたかったのです。
Could not determine access type for property "id".
その私はフィールドのIDを使用したいという理由だけで:私はエラーを取得するので、しかし、私は、フォームを送信傾けます。もちろん、私は削除のために右のエンティティを特定するために、srcまたはFileの他の列を使用することができます。
しかし、symfonyでこの問題に対処するには全体としてより良い方法がありますか?
ここに私のエンティティのマッピング:
AppBundle\Entity\File:
type: entity
table: files
repositoryClass: AppBundle\Repository\FileRepository
manyToOne:
document:
targetEntity: Document
inversedBy: files
joinColumn:
onDelete: CASCADE
AppBundle\Entity\Document:
type: entity
table: documents
repositoryClass: AppBundle\Repository\DocumentRepository
oneToMany:
files:
targetEntity: File
mappedBy: document
感謝を推測、symfonyのフォームは、インデックスによってそれを扱う、あなたの
FileType
にフィールドを識別する追加する必要はありませんが、どのように私は、エンティティを削除することができますか?値を変更するためのフィールドを追加しない場合、エンティティを削除する必要があることをどのようにマークできますか? – Asaraはい、あなたのエントリを表示するために私の例のようないくつかのフィールドを追加する必要があります。あなたはjavascriptを使ってそれを削除するだけで、Symfonyフォームはそのエントリを削除します。 symfonyのフォームコレクションについて詳しく説明しているこのドキュメントを見てください:[フォームのコレクションを埋め込む方法](http://symfony.com/doc/current/form/form_collections.html) –
私はちょうど試してみました。 JSを介して無効にし、POSTデータにはないことを確認しましたが、symfonyはそれを削除しませんでした。 ok私は再度docページをチェックします。 – Asara