Symfony FosUserBundle控制器覆盖

Symfony FosUserBundle控制器覆盖,symfony,controller,fosuserbundle,Symfony,Controller,Fosuserbundle,[设置] Symfony 3.4 FosUserBundle 2.0 限制:() [问题] 阅读Symfony文档时,关于, 我遇到了这样的情况: 如果控制器是服务,请参阅下一节中关于如何覆盖它的内容。否则,请使用与要覆盖的控制器关联的相同路径定义一个新的route+控制器(并确保在捆绑之前加载新路由) 看到医生在一些最重要的部分仍然像以前一样不完整,不知何故,我感到欣喜若狂。。。对,这部分没有代码示例,甚至不能确定要做什么 有人能给我举个例子说明如何覆盖FosUserBundle吗?像登录

[设置]

  • Symfony 3.4
  • FosUserBundle 2.0
  • 限制:()
[问题]

阅读Symfony文档时,关于,
我遇到了这样的情况:

如果控制器是服务,请参阅下一节中关于如何覆盖它的内容。否则,请使用与要覆盖的控制器关联的相同路径定义一个新的route+控制器(并确保在捆绑之前加载新路由)

看到医生在一些最重要的部分仍然像以前一样不完整,不知何故,我感到欣喜若狂。。。对,这部分没有代码示例,甚至不能确定要做什么

有人能给我举个例子说明如何覆盖FosUserBundle吗?像登录部分这样的一个部分就足够了。同样的逻辑也适用于其他章节

另外,作为附带问题:

  • 是否值得使用FosUserBundle
  • 有比FosUserBundle更容易使用的捆绑包吗
  • 让我自己的逻辑来处理登录不是更有价值、更快吗

    • 我的理解是:只需创建控制器,然后在配置中为其添加一条与要覆盖的路径相同的路由,确保之前已加载

      例如,要覆盖登录操作,请执行以下操作:

      // AppBundle\Controller\UserController.php
      
      /**
       * @route("/login", name="login_override")
       * @param Request $request
       * @return Response
       */
      public function loginAction(Request $request)
      {
          /** @var $session Session */
          $session = $request->getSession();
      
          $authErrorKey = Security::AUTHENTICATION_ERROR;
          $lastUsernameKey = Security::LAST_USERNAME;
      
          // get the error if any (works with forward and redirect -- see below)
          if ($request->attributes->has($authErrorKey)) {
              $error = $request->attributes->get($authErrorKey);
          } elseif (null !== $session && $session->has($authErrorKey)) {
              $error = $session->get($authErrorKey);
              $session->remove($authErrorKey);
          } else {
              $error = null;
          }
      
          if (!$error instanceof AuthenticationException) {
              $error = null; // The value does not come from the security component.
          }
      
          // last username entered by the user
          $lastUsername = (null === $session) ? '' : $session->get($lastUsernameKey);
      
          $tokenManager = $this->container->get('security.csrf.token_manager');
      
          $csrfToken = $tokenManager
              ? $tokenManager->getToken('authenticate')->getValue()
              : null;
      
          return $this->render('@FOSUser/Security/login.html.twig', array(
              'last_username' => $lastUsername,
              'error' => $error,
              'csrf_token' => $csrfToken,
          ));
      }
      


      一方面,FOSUserBundle是目前使用最广泛的第三方包。很难想象成千上万的开发者会错。另一方面,如何定制它是这个板块上最常见的问题之一。几乎每个人都想定制它。在我公认的少数派观点中,这一捆绑要比它的价值麻烦得多。SecurityBundle拥有99%的所需功能。添加一个注册操作,你就可以开始了。用户提供者(以及用户)是你可能需要的一部分。从安全文档的开头开始,浏览它们,看看它们是如何结合在一起的,这是非常值得的。始终记住,我对用户管理的看法并不完全是主流。@Cerad-那么,你是说我应该?似乎更简单。我不熟悉Symfony SecurityBundle,我所知道的最多是FosUserBundle扩展了它。我将等待更多的答复,但我仍然认为我会按照你的建议去做,从一开始就为自己的安全做准备。谢谢(抱歉重新发布,5分钟的限制太短了…)
      #app\config\routing.yml
      app:
          resource: '@AppBundle/Controller/'
          type: annotation
      
      fos_user:
          resource: "@FOSUserBundle/Resources/config/routing/all.xml"