«Объект App\Entity\User не найден по аннотации @ParamConverter»

У меня проблема с одним из моих маршрутов, когда я пытаюсь получить к нему доступ, у меня возникает эта ошибка: «Объект App\Entity\CompanyUser не найден по аннотации @ParamConverter»

У многих людей такая же проблема, но ни одно из решений, которые я видел, не могло решить мою проблему.

Моя функция редактирования:

private $passwordEncoder;

public function __construct(UserPasswordEncoderInterface $passwordEncoder)
{
    $this->passwordEncoder = $passwordEncoder;
}

/**
 * @Route("/{id}/edit", name = "company_user_edit", methods = {"GET","POST"}, requirements = {"id" = "\d+"})
 */
public function edit(Request $request, UserPasswordEncoderInterface $passwordEncoder, CompanyUser $user): Response
{
    $em = $this->getDoctrine()->getManager();
    $user = $this->getUser();
    $reset_password_form = $this->get('form.factory')->create(CompanyResetPasswordType::class, $user);
    $reset_password_form->handleRequest($request);

    if ($reset_password_form->isSubmitted() && $reset_password_form->isValid()) {

        $this->passwordEncoder->isPasswordValid($this->getUser(), $request->get('password'));
        $oldPassword = $request->request->get('reset_password')['oldPassword'];

        // Si l'ancien mot de passe est bon
        if ($passwordEncoder->isPasswordValid($user, $oldPassword)) {
            $newEncodedPassword = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
            $user->setPassword($newEncodedPassword);

            $em->persist($user);
            $em->flush();

            $this->addFlash('notice', 'Succeed to change your password');

            return $this->redirectToRoute('company_show', ['id' => $user->getCompany()->getId()]);

        } else {
            $reset_password_form->addError(new FormError('Old password is not valid'));
        }
    }

    $edit_form = $this->createForm(CompanyUserType::class, $user);
    $edit_form->handleRequest($request);

    if ($edit_form->isSubmitted() && $edit_form->isValid()) {
        $this->getDoctrine()->getManager()->flush();

        return $this->redirectToRoute('company_show', ['id' => $user->getCompany()->getId()]);
    }

    return $this->render('user/edit.html.twig', [
        'user' => $user,
        'edit_form' => $edit_form->createView(),
        'reset_password_form' => $reset_password_form->createView(),
    ]);
}

Спасибо за вашу помощь !

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
14 065
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете переопределить ParamConverter следующим образом

/**
 * @Route("/{id}/edit", name = "company_user_edit", methods = {"GET","POST"}, requirements = {"id" = "\d+"})
 * @ParamConverter("id", class = "CompanyUser", options = {"id": "id"})
 */

Старая часть {id} маршрута должна измениться на то же имя, что и параметр, который вы конвертируете.

т.е. изменять:

 * @Route("/{id}/edit", name = "company_user_edit", methods = {"GET","POST"}, requirements = {"id" = "\d+"})

К

 * @Route("/{user}/edit", name = "company_user_edit", methods = {"GET","POST"}, requirements = {"id" = "\d+"})

В моем случае проблема была в неправильном имени роутера для всего контроллера. Я использовал генератор, который делал это автоматически. документы:

/**
 * @Route("/document")
 */
class DocumentController extends AbstractController


/**
 * @Route("/document/group")
 */
class DocumentGroupController extends AbstractController

Я изменил имя роутера

@Route("/document/group") 

к

@Route("/document_group")

Другие вопросы по теме