Выбор 1 или более Isnt слишком трудно: См 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 был протестирован и более предназначен для отображения и пример, я полагаю, немного о вашей установке, но что-то, как он должен работать для вас.
Хорошо, это возможное решение, но не совсем то, что я ищу. Я хочу, чтобы mantain myTextType, потому что есть много полей и других отношений. –
@ RiccardoCorrò Что вы называете тегами типа? Может быть, это можно адаптировать к этому? – Chausser
Да, может. Но это может усложнить управление, и я могу потерять эффективность форм symfony. –