如何在Symfony 3中覆盖FOSUserBundle的ProfileController?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Symfony 3中覆盖FOSUserBundle的ProfileController?相关的知识,希望对你有一定的参考价值。

我试图覆盖FOSUserBundle的某些部分。

我必须自定义ProfileController(尤其是showAction)。我找了一个解决方案,发现我必须在UserBundle中创建一个新的ProfileController,并继承原始的FOSUserBundle ProfileController。

这就是我所做的。

use FOSUserBundleControllerProfileController as BaseController;

class ProfileController extends BaseController

我也知道如何通过在我自己的UserBundle中创建相同的名称文件来覆盖twig视图。

我的问题是,我不知道如何使用我的ProfileController而不是原始的Symfony。

我是否必须在App / Config / routing.yml中更改路由?

或者只是在我的UserBundle中创建一个.xml路由文件,然后在App / Config / routing.yml中导入它?

我首先犯了定制FOSUserBundle文件的错误,但我知道这不是正确的方法,这就是为什么我现在正在尝试进行干净的更改。

答案

ProfileController注册为名为fos_user.profile.controller的服务,您可以在this配置文件中看到。

为了覆盖控制器/服务(对于Symfony 3.4),您需要在app/config/services.yml中重新定义此服务:

services:
  # [..]
  'fos_user.profile.controller':
    class: 'YourNamespaceProfileController'
    public: true
    arguments:
      - '@event_dispatcher'
      - '@fos_user.profile.form.factory'
      - '@fos_user.user_manager'
    calls:
      - [ 'setContainer', [ '@service_container' ]]

现在清除缓存。然后,Symfony将使用您的ProfileController类作为名为fos_user.profile.controller的服务。

以上是关于如何在Symfony 3中覆盖FOSUserBundle的ProfileController?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony - 如何覆盖不在捆绑包中的供应商组件

无法解析 symfony 4.3 中覆盖 FOS 控制器的参数 $token

symfony 4 base twig方法覆盖

在 Symfony 4.4 中覆盖复选框表单字段产生重复标签且没有字段

在 phpunit 测试中覆盖 symfony TokenAuthenticator

yaml/symfony2:覆盖配置