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