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

问题描述 投票:1回答:1

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

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

这就是我所做的。

use FOS\UserBundle\Controller\ProfileController as BaseController;

class ProfileController extends BaseController

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

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

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

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

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

symfony fosuserbundle symfony-3.4
1个回答
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的服务。

© www.soinside.com 2019 - 2024. All rights reserved.