У меня есть 3 Entities: Статья, Автор, Reivews:В Symfony: Как вставить форму в связанную с ней сущность без включения поля внешнего ключа (заполнить это при отправке)?
отношений:
- Статья имеет один автор.
- В статье много отзывов.
- У автора много статей.
- Обзор имеет один автор.
- Обзор имеет один артикул.
Авторы создают как статьи, так и обзоры. Это пользователи приложения.
Я пытаюсь внедрить смесь объектов Author, Article и AND в представлении SHOW статьи. Но только те материалы, которые предоставят пользователи (авторы).
Пример использования примера: пользователь (автор) находится в представлении SHOW статьи. Он будет предложено оставить отзыв и форма содержит поля:
- рейтинг (Обзор Entity)
- обзор Название (Обзор Entity)
- имя (Автор Entity)
- электронной почты (Автор Entity)
Уведомление о том, что НЕ ДОЛЖНО отображать любые поля, запрашиваемые в статье! В какой-то момент мы сможем захватить это за кулисами и заполнить новый код статьи review_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));
}
);
}
Спасибо заранее за любой вклад, вы можете предоставить !!!
Спасибо! Это блестящая идея. Поэтому, если вы не возражаете, позвольте мне прояснить некоторые вещи, которые я все еще путаю: мы все равно построим форму в ArticleType-> buildForm правильно? Если я добавлю в автору и элементы формы обзора, это не испортит мою стандартную форму добавления/редактирования статьи? Я не уверен, как справиться с этим. Еще раз спасибо! – user2305673
Да, вы можете создать форму как обычно. Вы должны удалить поле 'author' из' ReviewType' и 'addEventListener'. Затем вы можете установить идентификатор автора и идентификатор статьи в контроллере, где вы управляете постоянством обзора. Почему -1? – ste
Хорошо, это прекрасно, спасибо за помощь. Я не уверен, почему/кто дал downvote. Вонючий, они даже не дали причины, но ваше решение отлично работает для меня. – user2305673