Предположим, у меня есть две сущности: post
и comment
. Каждый post
может иметь много comments
. Теперь предположим, что у меня есть форма комментария. Предполагается принять пользовательский ввод и сохранить его в базе данных.
Простые вещи. По крайней мере, так и должно быть, но я не могу заставить его работать.
Как обратиться к записи (родительской) при создании комментария (дочерней)? Я попытался вручную передать post_id
в форму комментария как скрытое поле, но получил сообщение об ошибке с жалобой на как идентификатор сообщения является строкой.
Expected argument of type "App\Entity\Post or null", "string" given.
Вот мой код. Может ли кто-нибудь подтолкнуть меня в правильном направлении?
CommentType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$post_id = $options['post_id'];
$builder->add('content', TextareaType::class, [
'constraints' => [
new Assert\NotBlank(['message' => 'Your comment cannot be blank.']),
new Assert\Length([
'min' => 10,
'minMessage' => 'Your comment must be at least {{ limit }} characters long.',
]),
],
])->add('post', HiddenType::class, ['data' => $post_id]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Comment::class,
'post_id' => NULL,
]);
}
PostController.php (здесь появляется форма комментария)
// Generate the comment form.
$comment = new Comment();
$form = $this->createForm(CommentType::class, $comment, [
'action' => $this->generateUrl('new_comment'),
'post_id' => $post_id,
]);
CommentController.php
/**
* @param Request $request
* @Route("/comment/new", name="new_comment")
* @return
*/
public function new(Request $request, UserInterface $user)
{
// 1) Build the form
$comment = new Comment();
$form = $this->createForm(CommentType::class, $comment);
// 2) Handle the submit (will only happen on POST)
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
// 3) Save the comment!
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($comment);
$entityManager->flush();
}
return $this->redirectToRoute('homepage');
}
Большое спасибо за помощь!