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

时间:2018-11-07 11:55:55

标签: symfony fosuserbundle symfony-3.4

我正在尝试覆盖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文件的错误,但是我知道这不是正确的方法,这就是为什么我现在尝试进行干净的更改。

1 个答案:

答案 0 :(得分:1)

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

为了覆盖控制器/服务(对于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类用作名为fos_user.profile.controller的服务。