Как использовать ParamConverter с Doctrine и Symfony2

0

Я знаю, что я, вероятно, пропустил что-то очень простое, но я просто не знаю, что, и я все еще довольно новичок в symfony.

Я хотел бы иметь url like /admin/user/edit/1234 где контроллер использует paramConverter для автоматической загрузки пользователя из своего ID. Но я все время получаю ошибку.

Some mandatory parameters are missing ("id") to generate url for route.

Я пробовал следовать http://symfony.com/doc/current/best_practices/controllers.html, но он не очень подробно описывает, как все это работает.

Здесь мой маршрут

admin_edit_user:
    pattern: /users/edit/{id}
    defaults: {_controller: MyBundle:AdminUsers:editUser}
    requirements:
        id: \d+

И вот мой контроллер

<?php
//...
    class AdminUsersController extends Controller
    {
        //... 
        public function editUserAction(Request $request , User $user)
        {
            $info = $user->getInfo();

            if(is_null($info))
            {
                $info = new UserInfo();
            }

        $userInfoForm = $this->createForm(new UserInfoType() , $info , array(
        'action' => $this->generateUrl('admin_edit_user')
    ));

        $userInfoForm->handleRequest($request);

        if($userInfoForm->isValid())
        {
            if(is_null($user->getInfo()))
            {
                $user->setInfo($info);
            }

            $em = $this->getDoctrine()->getManager();
            $em->persist($info);
            $em->persist($user);
            $em->flush();
            $request->getSession()->getFlashBag()->add('notice' , 'User Info succesfully updated.');
        }

        return $this->render('MyBundle:Admin/Users:edit.html.twig' , array(
            'user_info_form' => $userInfoForm->createView(),
            'user' => $user
        ));
    }
}
Теги:
doctrine

1 ответ

0
Лучший ответ

Игнорируй меня! Я нашел проблему. Когда я создаю URL-адрес формы, мне не хватало необходимых параметров.

$userInfoForm = $this->createForm(new UserInfoType() , $info , array(
    'action' => $this->generateUrl('admin_edit_user')
));

Нужно быть

$userInfoForm = $this->createForm(new UserInfoType() , $info , array(
    'action' => $this->generateUrl('admin_edit_user' , array('id' => '1234'))
));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню