【问题标题】:How to override FOSUserBundle/Doctrine/UserManager.php如何覆盖 FOSUserBundle/Doctrine/UserManager.php
【发布时间】:2013-05-19 20:05:31
【问题描述】:

我正在将文件上传系统与 fosuserbundle 集成

我需要重写 updateUser 函数 在

/vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Doctrine/UserManager.php

我把这个文件复制到了

/ACME/UserBundle/Doctrine/UserManager.php

但它不起作用。

这是我的临时 /vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Doctrine/UserManager.php

public function updateUser(UserInterface $user, $andFlush = true)
{
    $this->updateCanonicalFields($user);
    $this->updatePassword($user);

   //it works but it  should not be used here.
    $user->upload();
    //

    $this->objectManager->persist($user);
    if ($andFlush) {
        $this->objectManager->flush();
    }
}     

【问题讨论】:

  • 请查看我的回答并询问是否有任何不清楚的地方,否则接受 :)

标签: symfony fosuserbundle


【解决方案1】:

您不能像您尝试的那样通过简单的包继承来覆盖 UserManager,因为它在整个 FOSUserBundle 中用作服务。

在你的包中创建一个服务配置(即 services.xml )并添加你自己的 acme.user_manager 服务:

<?xml version="1.0" encoding="UTF-8" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"
>

    <parameters>
        <parameter key="acme.user_manager.class">ACME/UserBundle/Doctrine/UserManager</parameter>
    </parameters>

    <services>
        <service id="acme.user_manager" class="%acme.user_manager.class%" public="false">
            <argument type="service" id="security.encoder_factory" />
            <argument type="service" id="fos_user.util.username_canonicalizer" />
            <argument type="service" id="fos_user.util.email_canonicalizer" />
            <argument type="service" id="fos_user.entity_manager" />
            <argument>%fos_user.model.user.class%</argument>
        </service>
    </services>
</container>

然后在你的 config.yml 中配置 FOSUserBundle 使用这个服务作为 UserManager

fos_user:
    # ...
    service:
        user_manager: acme.user_manager

【讨论】:

  • 谢谢!它工作!我不知道如何制作服务脚本,我会试着弄清楚。
【解决方案2】:

刚刚解决了类似的问题。也许会对某人有所帮助。 Symfony 3.3.6,FosUserBundle 2.0.1

services:
    you_bundle.user_manager:
        class: YourBundle\Services\UserManager
        arguments: ["@fos_user.util.password_updater", "@fos_user.util.canonical_fields_updater", "@doctrine.orm.entity_manager", "%fos_user.model.user.class%"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 2012-08-03
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多