研究如何配置特定的服务.yml值-Symfony2


Working out how to configure specific services.yml values - Symfony2

我正在尝试扩展这个类:

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

您可以为扩展服务定义父服务,并且不必担心构造函数的原始参数,因为它们将被继承。

parameters:
    newsletter_manager.class: NewsletterManager
services:
    newsletter_manager:
        class:     "%newsletter_manager.class%"
        parent: mail_manager
        calls:
            - [setMailer, ["@my_alternative_mailer"]]

然后用setter注入进行扩展,正如我在这里提到的。

现在,您只需在供应商文件夹中执行文件内文本搜索,即可找到AbstractRememberMeServices的服务名称,该搜索将指向一个包含服务定义和服务名称的xml;)

编辑:

好的,我给你一个提示。。。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>