私はsymfony、UserとTagsに2つのエンティティを持っていますが、各ユーザは多くのタグとの関係にあります。symfonyフォーム、新しいエンティティとエンティティタイプのコレクションを一緒に
私のユーザーのフォームでは、1つ以上のタグを選択して新しいタグを作成できるようにしたいと考えています。
どうすればこの問題を解決できますか?
タグを選択する方法や新しいタグを作成する方法を読んだことがありますが、これは私が望むものではありません。
私はsymfony、UserとTagsに2つのエンティティを持っていますが、各ユーザは多くのタグとの関係にあります。symfonyフォーム、新しいエンティティとエンティティタイプのコレクションを一緒に
私のユーザーのフォームでは、1つ以上のタグを選択して新しいタグを作成できるようにしたいと考えています。
どうすればこの問題を解決できますか?
タグを選択する方法や新しいタグを作成する方法を読んだことがありますが、これは私が望むものではありません。
あまりにもハード1以上ありえないを選択: http://symfony.com/doc/current/reference/forms/types/collection.html
具体的に使用してallow_add
allow_delete
とprototype
オプションを参照してください。
$builder->add('favorite_cities', CollectionType::class, array(
'entry_type' => EntityType::class,
'entry_options' => array(
'prototype' => true,
'allow_add' => true,
'allow_delete' => true,
'class' => 'AppBundle:Tag'
),
));
これは、同じコンテキスト内でのタグの作成はもう少しトリッキーです、あなたが存在してタグを追加および削除することができます。あなたができることは、タグ・エンティティを標準入力フィールドを直接使用するのではなく、コントローラ・ループ内でタグが存在するかどうかをチェックし、タグが存在しない場合はそれを関連付けます。ような何か:
// AppBundle/Form/UserType.php
...
$builder->add('favorite_cities', CollectionType::class, array(
'entry_type' => TextType::class,
'entry_options' => array(
'prototype' => true,
'allow_add' => true,
'allow_delete' => true,
),
));
// AppBundle/Controller/UserController
...
public function addFavoriteCitiesAction(Request $request) {
$user = ... // However you get your user
$form = $this->createForm(UserType::class,$user);
if($request->isMethod('POST')) {
$form->handleRequest($request);
$favCities = $user->getFavoriteCities(); // Should be an array of strings
$em = $this->getDoctrine()->getManager();
$tagRepo = $em->getRepository('AppBundle:Tag');
foreach($favCities as $favCity) {
$tag = $tagRepo->findOneBy([
'name' => $favCity
]);
if(!$tag){
$tag = new Tag(); // AppBundle/Entity/Tag.php ?
$tag->setName($favCity);
$em->persist($tag);
}
$user->addTag($tag);
}
$em->flush();
}
return [
'form' => $form->createView();
];
}
このコードhasntがテストされ、そしてより多く表示され、たとえばことを意図している、私はあなたのセットアップが、それはあなたのために働く必要があるようなものについて少し前提としています。
これは可能な解決策ですが、私が探しているものではありません。私は多くのフィールドや他の関係があるので、私はTagsTypeを手放したいです。 –
@RiccardoCorròあなたはどのようなタグタイプですか?たぶん、これはそれに適応することができますか? – Chausser
はい、できます。しかしそれは管理を複雑にすることがあり、私はsymfonyのフォームの効率を失う可能性があります。 –