如何在 Doctrine 和 Symfony2 中使用 ParamConverter
How to use ParamConverter with Doctrine and Symfony2
我知道我可能错过了一些非常简单的东西,但我不知道是什么,而且我对 symfony 还是很陌生。
我想要一个像 /admin/user/edit/1234
这样的 url,其中控制器使用 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
));
}
}
别理我!我发现了问题。当我为表单生成 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'))
));
我知道我可能错过了一些非常简单的东西,但我不知道是什么,而且我对 symfony 还是很陌生。
我想要一个像 /admin/user/edit/1234
这样的 url,其中控制器使用 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
));
}
}
别理我!我发现了问题。当我为表单生成 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'))
));