可能是晚了,但它可以帮助其他人
我正面临与Symfony和FOSUserBundle相同的问题。
在FOSUserBundle个人资料链接为:
SITE_URL /资料/
SITE_URL /型材/编辑
SITE_URL /型材/更改密码
我有一个管理和仪表板,和我想要的链接,在管理面板
SITE_URL /管理/资料/
SITE_URL /管理/配置文件/编辑
SITE_URL /管理/配置文件/更改密码
,并在用户面板
SITE_URL /仪表板/型材/
SITE_URL /仪表板/型材/编辑
SITE_URL /仪表板/型材/变化 - 密码
要获得这种行为是非常简单的,而不事件侦听和TwigExtesion
这里的解决方案:
更换
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
通过
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
fos_user_registration:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /{prefix}/profile
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /{prefix}/profile
在模板中使用:
<a href="{{ path('fos_user_profile_show', {'prefix': 'dashboard'}) }}">Show Profile</a>
<a href="{{ path('fos_user_profile_edit', {'prefix': 'dashboard'}) }}">Edit Profile</a>
<a href="{{ path('fos_user_change_password', {'prefix': 'dashboard'}) }}">Change Password</a>
或者你想
任何其他前缀现在,如果你使用例如更改密码链接你会得到这个错误
一个例外模板的渲染过程中被抛出(“有些 强制性参数丢失(”前缀“)来生成 路由器的URL‘fos_user_change_password’。”)在 FOSUserBundle:ChangePassword:changePassword_content.html在线 3。
你可以在模板中添加前缀像这样:
更换
<form action="{{ path('fos_user_change_password') }}" {{ form_enctype(form) }} method="POST" class="fos_user_change_password">
通过
<form action="{{ path('fos_user_change_password', {'prefix': app.request.attributes.get('prefix') }) }}" {{ form_enctype(form) }} method="POST" class="fos_user_change_password">
这会给你这个错误
一些强制性的参数缺少(“前缀”)来生成e路由“fos_user_profile_show”的 的URL。
我找到最终的解决方案是重写控制器
只是在你的应用程序控制器文件夹中的孔CONTROLE复制,改变namesapce并更换
if (null === $response = $event->getResponse()) {
$url = $this->generateUrl('fos_user_profile_show');
$response = new RedirectResponse($url);
}
通过
if (null === $response = $event->getResponse()) {
$url = $this->generateUrl('fos_user_profile_show',array('prefix'=>$request->get('prefix')));
$response = new RedirectResponse($url);
}
在形式上你不需要这样做,所以它会是
<form {{ form_enctype(form) }} method="POST" class="fos_user_change_password">
是的,这是有效的,但我试图避免不得不把每个路口下的{宗教}占位符放在/神下...想象一下,我有100条路线/神,我将不得不添加{宗教}占位符每一个。如果相反,我将它添加到前缀我只会添加一次。 – Noquepoaqui