Функции запуска Symfony2 из формы, теги в посте

Я определил ряд функций объекта Tag (индекс, создание, редактирование и т. Д.) Как сервис. Когда я создаю сообщение в форме, я добавляю поле «теги», чтобы включить теги, связанные с этим сообщением.

У меня вопрос: как я могу реализовать функции, которые я определил в TagManager? Функция, которую я хочу использовать, называется ‘newOrLoadTag’. Я не уверен, как я должен использовать это, если внутри PostController или PostForm.

Мой второй вопрос, как я могу ограничить входные теги? Я хочу, чтобы в сообщении было не более 5 тегов. Я думаю, что я должен определить поле «теги» сущности Post как массив размером 5. Это лучший способ сделать это? Если это так, как я могу это реализовать?

0

Решение

Вы должны запретить добавление более 5 тегов на стороне клиента (js), лично я бы использовал множественный выбор selected.js или tagsinput.js

Ваша функция newOrLoad внутри tagservice может выглядеть так:

public function newOrLoadTag($tagName){
$foundTag=$tagRepo->findOneByName($tagName);
if($foundTag){
return $foundTag;
}else{
//should return instance of Tag
return $this->createTag($tagName)
}
}

внутри вашего PostController вы можете получить теги из запроса, давайте предположим, что это строка и выбранный тэг разделены «;»

    if ('POST' === $request->getMethod()) {
$form->handleRequest($request);
if ($form->isValid()) {
$post=$form->getData();
// get tags from request
$tags=$request->get('tags') ? urldecode($request->get('tags')) : false;

// persist the post and remove all tags
$em->persist($post);
foreach ($entity->getTags() as $tag) {
$post->removeTag($tag);
}
// add all tags
if($tags){
$tags=explode(';', $tags);
$c=1;
foreach ($tags as $tag) {
if($c<=5){
$tag = $tagService->newOrLoadTag($tag);
$post->addTag($tag);
}
$c++;
}
}
//...
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]