gpt4 book ai didi

symfony - 如何覆盖 FOSUserBundle/Doctrine/UserManager.php

转载 作者:行者123 更新时间:2023-12-04 08:41:32 25 4
gpt4 key购买 nike

我正在将 fileupload 系统与 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();
}
}

最佳答案

您不能像您尝试的那样通过简单的包继承来覆盖 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

关于symfony - 如何覆盖 FOSUserBundle/Doctrine/UserManager.php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16731279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com