Я работаю над почтовым ящиком между двумя пользователями для моего приложения. Я сделал контроллер, форму и представление, все работает, за исключением случаев, когда я добавляю сущность Ad
в MessageController
, чтобы вернуть информацию об объявлении, для просмотра.
Сообщение об ошибке:
App\Entity\Ad object not found by the @ParamConverter annotation.
Я сделал то же самое, когда управлял бронированием рекламы, все работало отлично, я действительно не понимаю, что не так с остальными.
Например, мой BookingController
, который работает:
/**
* @Route("/ads/{id}/booking", name="ad_booking")
* @IsGranted("ROLE_USER")
*
* @return Response
*/
public function booking(Ad $ad, Request $request, ObjectManager $manager)
{
$booking = new Booking;
$form = $this->createForm(BookingType::class, $booking);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
$user = $this->getUser();
$booking->setBooker($user)
->setAd($ad)
;
if(!$booking->isAvailableDate())
{
$this->addFlash(
'warning',
'Attention, les dates que vous avez choisies ne sont pas disponibles, elles ont déjà été réservées.'
);
}
else
{
$manager->persist($booking);
$manager->flush();
$this->addFlash(
'success',
"Votre réservation a bien été effectuée !"
);
return $this->redirectToRoute('booking_show', [
'id' => $booking->getId(),
'withAlert' => true
]);
}
}
return $this->render('booking/booking.html.twig', [
'ad' => $ad,
'bookingForm' => $form->createView()
]);
}
Мой MessageController
, который не работает:
namespace App\Controller;
use App\Entity\Ad;
use App\Entity\Message;
use App\Form\MessageType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class MessageController extends AbstractController
{
/**
* @Route("/ads/{id}/message", name="message_provider")
* @IsGranted("ROLE_USER")
*
* @return Response
*/
public function message(Ad $ad, Request $request, ObjectManager $manager)
{
$message = New Message();
$form = $this->createForm(MessageType::class, $message);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$ad = $this->getAd();
$user = $this->getUser();
$message->setSender($user)
->setAd($ad)
;
$manager->persist($message);
$manager->flush();
$this->addFlash(
'success',
"Votre message n°{$message->getId()} a bien été envoyé."
);
return $this->redirectToRoute('message_show', [
'id' => $message->getId()
]);
}
return $this->render('message/new.html.twig', [
'form' => $form->createView()
]);
}
/**
* @Route("/message/{id}", name="message_show")
*
* @return Response
*/
public function showmessage(Message $message)
{
return $this->render('message/show.html.twig', [
'message' => $message,
]);
}
}
и моя Message
сущность
namespace App\Entity;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\MessageRepository")
*/
class Message
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="text")
*/
private $content;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="messages")
* @ORM\JoinColumn(nullable=false)
*/
private $receiver;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="sentMessages")
* @ORM\JoinColumn(nullable=false)
*/
private $sender;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Ad", inversedBy="messages")
* @ORM\JoinColumn(nullable=false)
*/
private $ad;
/**
* @ORM\Column(type="datetime")
*/
private $createdAt;
Я все еще получал сообщение об ошибке App\Entity\Ad object not found by the @ParamConverter annotation.
, даже когда пытался определить @ParamConverter в аннотации. Я не вижу, что не так.