我正在尝试扩展这个类:
Symfony\Component\Security\Http\RememberMe\AbstractRememberMeServices
...我还需要传递一些额外的变量。这意味着我需要调用上面的AbstractRememberMeServices类的_ 结构(父类: _construct来自新类),但是我看不到从哪里获取所有变量。
这是__construct:
public function __construct(array $userProviders, $key, $providerKey, array $options = array(), LoggerInterface $logger = null)
{
if (empty($key)) {
throw new \InvalidArgumentException('$key must not be empty.');
}
if (empty($providerKey)) {
throw new \InvalidArgumentException('$providerKey must not be empty.');
}
if (0 === count($userProviders)) {
throw new \InvalidArgumentException('You must provide at least one user provider.');
}
$this->userProviders = $userProviders;
$this->key = $key;
$this->providerKey = $providerKey;
$this->options = $options;
$this->logger = $logger;
}
我可以解决其中一个,但我在哪里可以得到其余的?由于这些通常是自动设置的,所以我当然可以使用它们而不是手动再次设置它们。
services.yml:
arguments:
-
-
-
-
- @logger
答案 0 :(得分:1)
您可以为扩展服务定义parent service,并且您不必担心构造函数的原始参数,因为它们将被继承。
parameters:
newsletter_manager.class: NewsletterManager
services:
newsletter_manager:
class: "%newsletter_manager.class%"
parent: mail_manager
calls:
- [setMailer, ["@my_alternative_mailer"]]
然后像我提到的over here那样用二传手注射进行延伸。
现在您只需要在供应商文件夹中执行文件内文本搜索,找出AbstractRememberMeServices
的服务名称,这将指向包含服务定义和服务名称的xml < / strong>;)
编辑:
好的,我会给你一个提示...... vendor\symfony\symfony\src\Symfony\Bundle\SecurityBundle\Resources\config\security_rememberme.xml
这是服务定义:
<services>
<service id="security.authentication.listener.rememberme" class="%security.authentication.listener.rememberme.class%" public="false" abstract="true">
<tag name="monolog.logger" channel="security" />
<argument type="service" id="security.context" />
<argument type="service" id="security.authentication.rememberme" />
<argument type="service" id="security.authentication.manager" />
<argument type="service" id="logger" on-invalid="null" />
<argument type="service" id="event_dispatcher" on-invalid="null"/>
</service>
<service id="security.authentication.rememberme.services.persistent"
class="%security.authentication.rememberme.services.persistent.class%"
parent="security.authentication.rememberme.services.abstract"
abstract="true">
<argument type="service" id="security.secure_random" />
</service>