Переопределение почтовой службы в Laravel 5.4 - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь переопределить реализацию по умолчанию Mailer в Illuminate\Mail\MailServiceProvider.

Сначала я подумал, что просто расширю службу и переключу реализацию в контейнере следующим образом:

App \ Mail \ Mailer

<?php

namespace App\Mail;

class Mailer extends \Illuminate\Mail\Mailer
{
    public function getTo()
    {
        return $this->to;
    }
}

App \ Providers \ AppServiceProvider

<?php

namespace App\Providers;


class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('mailer', function (Container $app) {

            // ...

            $mailer = new \App\Mail\Mailer(
                $app['view'], $app['swift.mailer'], $app['events']
            );

            // ...

            return $mailer;
        });
    }
}

Проблема заключается в том, чтонесмотря на то, что я переопределил определение контейнера при разрешении службы, он полностью игнорирует мое определение, потому что Illuminate\Mail\MailServiceProvider имеет свойство $defer = true, что означает, что оно будет разрешено особым образом, например:

Осветить \ Foundation \ Application

public function make($abstract)
{
    $abstract = $this->getAlias($abstract);

    if (isset($this->deferredServices[$abstract])) {
        $this->loadDeferredProvider($abstract);
    }

    return parent::make($abstract);
}

Итак, не имеет значения, что я пытался переопределить службу, потому что Illuminate\Mail\MailServiceProvider всегда будет предпочтительнее, поскольку это deferred поставщик услуг,Я также попытался определить своего поставщика услуг как $defer = true, но безуспешно.

Единственный вариант, который я могу придумать, - это полностью удалить Illuminate\Mail\MailServiceProvider и заменить его на пользовательский.Но это кажется немного грубым.

Есть идеи?

1 Ответ

0 голосов
/ 18 сентября 2018

Единственный способ решить эту проблему - обновить Laravel до версии 5.5 и выше.Фиксированная версия указана в этом PR и не будет исправлена ​​в 5.4, поскольку версия больше не поддерживается.

...