2

私はこのクラスを拡張しようとしています:

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;
}

そのうちの 1 つを解決することはできますが、残りはどこで入手できますか? これらは通常自動的に設定されるため、手動で再設定するのではなく、それらを使用することができます。

services.yml:

arguments:
  - 
  -
  -
  -
  - @logger
4

1 に答える 1

2

拡張サービスの親サービスを定義できます。継承されるため、コンストラクターの元の引数について心配する必要はありません。

parameters:
    newsletter_manager.class: NewsletterManager

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

次に、ここで述べたように、セッター注入で拡張します。

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>
于 2013-08-01T18:24:54.060 に答える