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

How to override FOSUserBundle's ProfileController in Symfony 3?

我正在尝试覆盖 FOSUserBundle 的某些部分。

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

这就是我所做的。

use FOS\UserBundle\Controller\ProfileController as BaseController;

class ProfileController extends BaseController

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

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

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

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

我首先犯了自定义 FOSUserBundle 文件的错误,但我知道这不是正确的方法,这就是我现在尝试进行彻底更改的原因。

ProfileController 已注册为名为 fos_user.profile.controller 的服务,如您在 this 配置文件中所见。

为了覆盖 controller/service(对于 Symfony 3.4),您需要在 app/config/services.yml:

中重新定义此服务
services:
  # [..]
  'fos_user.profile.controller':
    class: 'Your\Namespace\ProfileController'
    public: true
    arguments:
      - '@event_dispatcher'
      - '@fos_user.profile.form.factory'
      - '@fos_user.user_manager'
    calls:
      - [ 'setContainer', [ '@service_container' ]]

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

的服务