【发布时间】:2020-07-03 20:11:53
【问题描述】:
我只是想更改内存中提供程序的默认 User 对象。默认User 对象为Symfony\Component\Security\Core\User\User。但是这个对象不能满足我的要求,所以我复制了那个对象并为我的要求添加了一些属性,然后将它命名为InMemoryUser 并像下面这样使用它:
encoders:
App\Component\Security\Core\User\InMemoryUser: plaintext
然后我在尝试运行应用程序时遇到以下错误。
No encoder has been configured for account "App\Component\Security\Core\User\InMemoryUser"
我调查了大约半小时后发现了问题。 Symfony 默认调用Symfony\Component\Security\Core\User\InMemoryUserProvider 并使用Symfony\Component\Security\Core\User\User 对象在__construct 方法中创建内存用户。
然后我尝试如下覆盖默认InMemoryUserProvider。
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.
这工作正常,除了一个小问题,不会像InMemoryUserProvider 那样注入$users。通常,$users 包含在security.yaml 中定义的内存用户列表。
现在,我如何为我的CustomInMemoryUserProvider 注入$users,这是将User 对象更改为InMemoryProvider 的好习惯吗?
提前感谢您的回答。
顺便说一句,我正在使用symfony 5.1。
【问题讨论】:
标签: php symfony dependency-injection symfony5