Symfony FOS UserBundle:覆盖错误着陆页



我在我的Symfony应用程序上覆盖了表单,但是我肯定在此过程中跳过了一些东西,但我不知道是什么。

基本上,一切都可以正常工作,看起来像我想要的那样,但是一旦我故意生成错误(即:将电子邮件地址更改为无效的电子邮件地址(,我就会重定向到孤独的形式模板,而不是重新加载在我的页面上带有生成并显示问题的页面。

我尝试替换这一行:

return $this->render('@FOSUser/Profile/edit.html.twig', array(
'form' => $form->createView(),
 ));

从profilecontroller那里,我认为这是原因,但是我尝试错误并在尝试时会遇到错误。

在显示提交表单的错误时,可以使用包含其他表格的自定义个人资料页面的正确语法是什么?

我假设您已经被自己的用户围栏覆盖了fosuserbundle(如官方文档中所述(。然后,您必须在自己的ProfileController中修改函数editAction(),然后编写UserBundle配置文件的TWIG模板(在下面的代码中查看我的最后一个评论(:

<?php
// src/UserBundle/Controller/ProfileController.php
namespace UserBundleController;
// use statements
class ProfileController extends Controller
{
    /**
     * Edit the user.
     *
     * @param Request $request
     *
     * @return Response
     */
    public function editAction(Request $request)
    {
        $user = $this->getUser();
        if (!is_object($user) || !$user instanceof UserInterface) {
            throw new AccessDeniedException('This user does not have access to this section.');
        }
        /** @var $dispatcher EventDispatcherInterface */
        $dispatcher = $this->get('event_dispatcher');
        $event = new GetResponseUserEvent($user, $request);
        $dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_INITIALIZE, $event);
        if (null !== $event->getResponse()) {
            return $event->getResponse();
        }
        /** @var $formFactory FactoryInterface */
        $formFactory = $this->get('fos_user.profile.form.factory');
        $form = $formFactory->createForm();
        $form->setData($user);
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            /** @var $userManager UserManagerInterface */
            $userManager = $this->get('fos_user.user_manager');
            $event = new FormEvent($form, $request);
            $dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_SUCCESS, $event);
            $userManager->updateUser($user);
            if (null === $response = $event->getResponse()) {
                $url = $this->generateUrl('fos_user_profile_show');
                $response = new RedirectResponse($url);
            }
            $dispatcher->dispatch(FOSUserEvents::PROFILE_EDIT_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
            return $response;
        }
        // Change the following line, with your custom profile twig template
        //return $this->render('@FOSUser/Profile/edit.html.twig', array(
        return $this->render('UserBundle:Profile:edit.html.twig', array(
            'form' => $form->createView(),
        ));
    }
}

最新更新