如何在 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
.
的服务
我正在尝试覆盖 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
.