第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更改內(nèi)存提供程序的默認(rèn)用戶對象

更改內(nèi)存提供程序的默認(rèn)用戶對象

PHP
UYOU 2023-07-08 21:45:50
我只是想更改User內(nèi)存提供程序的默認(rèn)對象。默認(rèn)User對象是Symfony\Component\Security\Core\User\User. 但這個對象不滿足我的要求,所以我復(fù)制了該對象并添加了一些滿足我的要求的屬性,然后將其命名為并按InMemoryUser如下方式使用:encoders:    App\Component\Security\Core\User\InMemoryUser: plaintext然后我在嘗試運(yùn)行該應(yīng)用程序時收到以下錯誤。No encoder has been configured for account "App\Component\Security\Core\User\InMemoryUser"經(jīng)過大約半個小時的調(diào)查,我發(fā)現(xiàn)了這個問題。Symfony\Component\Security\Core\User\InMemoryUserProviderSymfony默認(rèn)調(diào)用并使用Symfony\Component\Security\Core\User\User對象在方法中創(chuàng)建內(nèi)存用戶__construct。InMemoryUserProvider然后我嘗試按如下方式覆蓋默認(rèn)值。services:    App\Component\Security\Core\User\CustomInMemoryUserProvider:        decorates: security.user.provider.concrete.api_user_provider        arguments:            $users: []  # this should be contains in-memory users defined in the security.yaml but i dont know how to do that.$users這工作正常,除了一個小問題,不像 那樣注入InMemoryUserProvider。通常,$users包含定義在內(nèi)存中的用戶列表security.yaml?,F(xiàn)在,我如何$users為我的對象注入CustomInMemoryUserProvider,這是更改User對象的好習(xí)慣嗎InMemoryProvider?感謝您提前的答復(fù)。我就symfony 5.1順便用一下
查看完整描述

1 回答

?
森林海

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊

我從未完全解開正確裝飾其構(gòu)造函數(shù)由 DI 擴(kuò)展動態(tài)注入的服務(wù)的謎團(tuán)。


但是,在這種情況下,您真正需要做的就是更改內(nèi)存提供程序的類,這可以在內(nèi)核中的編譯器傳遞中完成:


# src\Kernel.php

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;

use App\User\InMemoryUserProvider;

class Kernel extends BaseKernel implements CompilerPassInterface

...

    public function process(ContainerBuilder $container)

    {

        $id = 'security.user.provider.in_memory';

        $container->getDefinition($id)->setClass(InMemoryUserProvider::class);

    }

在測試此功能時,我最初嘗試擴(kuò)展內(nèi)存提供程序中的現(xiàn)有核心,但它使用無法覆蓋的私有方法。所以我只是重新實現(xiàn)了完整的接口


namespace App\User;

class InMemoryUserProvider implements UserProviderInterface

{

    public function __construct(array $users)

    {

        dump($users); // Confirms get the users from security.yaml

    }

    public function loadUserByUsername(string $username)

    {

        // TODO: Implement loadUserByUsername() method.

        echo "Get User {$username}\n";

    }

確認(rèn)它已按預(yù)期接線:


bin/console debug:container | grep UserProv                                               

  App\User\InMemoryUserProvider = App\User\InMemoryUserProvider                                                                   

  Symfony\Component\Security\Core\User\UserProviderInterface = alias for "security.user.provider.concrete.users_in_memory"                                                                                                                    

  security.user.provider.concrete.users_in_memory = App\User\InMemoryUserProvider                                                                   

  security.user.provider.in_memory = App\User\InMemoryUserProvider                                                                                  

并發(fā)出一個命令來驗證它是否按預(yù)期工作:


class UserProviderCommand extends Command

{

    protected static $defaultName = 'user:provider';


    private $userProvider;


    public function __construct(UserProviderInterface $userProvider)

    {

        parent::__construct();

        $this->userProvider = $userProvider;

    }


    protected function execute(InputInterface $input, OutputInterface $output): int

    {

        echo "User Provider: " . get_class($this->userProvider) . "\n";

        $this->userProvider->loadUserByUsername('xxx');

        return 0;

    }

}


查看完整回答
反對 回復(fù) 2023-07-08
  • 1 回答
  • 0 關(guān)注
  • 172 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號