#php #symfony #routing
#php #symfony #маршруты
Вопрос:
У меня проблема с одним из моих маршрутов, когда я пытаюсь получить к нему доступ, я получаю эту ошибку: «Объект 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() amp;amp; $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() amp;amp; $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(),
]);
}
Спасибо за вашу помощь!
Ответ №1:
Вы можете переопределить ParamConverter следующим образом
/**
* @Route("/{id}/edit", name="company_user_edit", methods={"GET","POST"}, requirements={"id"="d "})
* @ParamConverter("id", class="CompanyUser", options={"id": "id"})
*/
Ответ №2:
В моем случае проблема заключалась в неправильном имени маршрутизатора для всего контроллера. Я использовал генератор, который делал это автоматически. документы:
/**
* @Route("/document")
*/
class DocumentController extends AbstractController
/**
* @Route("/document/group")
*/
class DocumentGroupController extends AbstractController
Я изменил название маршрутизатора
@Route("/document/group")
Для
@Route("/document_group")
Комментарии:
1. опасно! то же самое только что произошло и здесь. tnx для обмена вашим решением
Ответ №3:
Старая часть маршрута {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 "})
Ответ №4:
Symfony 5.4
У меня есть маршрут для извлечения профиля пользователя
routes.yaml
manage-users:
path: /Account/{id}/Manage
controller: AppControllerRegistrationController::manage
При запросе случайного идентификатора пользователя была выдана ошибка «Объект не найден«. Я добавил значение параметра пользовательского объекта по умолчанию как null и включил нулевую проверку в метод контроллера.
RegistrationController.php
public function manage(User $user = null) <= Default parameter value
{
try {
if(null === $user) {
$this->addFlash("error", "User Not Found");
return $this->redirectToRoute("home");
}
...
...
Надеюсь, это полезно, если кто-нибудь проверяет эту проблему.