В Symfony: Как мне вставить форму в связанную сущность, не включая поле внешнего ключа (заполните это при отправке)?

У меня есть 3 лица: статья, автор, отзывы:

Отношения:

  • Статья имеет одного автора.
  • Статья имеет много обзоров.
  • Автор имеет много статей.
  • Обзор имеет одного автора.
  • Обзор имеет одну статью.

Авторы создают как статьи, так и обзоры. Они пользователи приложения.

Я пытаюсь встроить смесь авторов, статей и рецензий в представление статьи. Но только те вклады, которые предоставят пользователи (авторы).

Пример использования: пользователь (автор) находится в режиме просмотра статьи. Ему предлагается оставить отзыв, а форма содержит поля:

  • рейтинг (обзор сущности)
  • заголовок отзыва (Entity Review)
  • имя (авторский объект)
  • электронная почта (Author Entity)

Обратите внимание, что мы НЕ должны отображать какие-либо поля, запрашиваемые статьи просматриваются! Мы должны быть в состоянии уловить это за кулисами в некоторый момент и заполнить article_id нового Обзора в коде.

Я работал над этим некоторое время, и я думаю, что это будет связано с формами и событиями? Вот где я нахожусь (что недалеко …)

В этой попытке я подумывал о том, чтобы просто заполнить поля для автоматического заполнения, а затем использовать скрытые поля … Я бы СКОЛЬКО НЕ ДЕЛАЛ ЭТОГО. Я не люблю давать людям возможность манипулировать article_id

class ReviewType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{

$builder->add('review')->add('title');

//$builder->add('article', HiddenType::class);

$builder->add('author', AuthorType::class, array("label" => FALSE));

$builder->add('rating', ChoiceType::class, array(
'choices' => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' =>'5'),
'expanded' => true,
'multiple' => false
));

$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (\Symfony\Component\Form\FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();

$article = $data->getArticle();
$articleId = null === $article ? array() : $article->getId();
$form->add('article', ArticleType::class, array("label" => FALSE));

}
);

}

Заранее спасибо за любой вклад, который вы можете предоставить !!!

0

Решение

Вы должны изменить действие вашей формы, сгенерированной и отображенной в article/{id}/show, чтобы что-то вроде article/{id}/review а затем получите идентификатор статьи в соответствующем действии, где вы управляете отправкой и сохранением формы.
Я думаю, что это не вопрос формы событий.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector