Laravel 容器升级问题

Laravel Container Upgrade Issue

我正在从 5.8 升级到 7,并且我有一个允许从数据库中提取邮件的 smtp 设置的功能。 它来自本教程 https://laravel-news.com/allowing-users-to-send-email-with-their-own-smtp-settings-in-laravel

     $this->app->bind('user.mailer', function ($app, $parameters) {
      $smtp_host = Arr::get($parameters, 'smtp_host');
      $smtp_port = Arr::get($parameters, 'smtp_port');
      $smtp_username = Arr::get($parameters, 'smtp_username');
      $smtp_password = Arr::get($parameters, 'smtp_password');
      $smtp_encryption = Arr::get($parameters, 'smtp_encryption');

      $from_email = Arr::get($parameters, 'from_email');
      $from_name = Arr::get($parameters, 'from_name');

      $from_email = $parameters['from_email'];
      $from_name = $parameters['from_name'];

      $transport = new Swift_SmtpTransport($smtp_host, $smtp_port);
      $transport->setUsername($smtp_username);
      $transport->setPassword($smtp_password);
      $transport->setEncryption($smtp_encryption);

      $swift_mailer = new Swift_Mailer($transport);

      $mailer = new Mailer($app->get('view'), $swift_mailer, $app->get('events'));
      $mailer->alwaysFrom($from_email, $from_name);
      $mailer->alwaysReplyTo($from_email, $from_name);

      return $mailer;
     });

这在以前的版本中有效,但是在 Laravel 7 中我收到一个错误

传递给 Illuminate\Mail\Mailer::__construct() 的参数 1 必须是字符串类型,对象给定

这里失败 $app->get('view')

我已经查看了升级指南,但我正在努力修复它。

我比较了两个版本的__construct,你可以看出区别。

5.8 construct

在第 86 行 void __construct(工厂 $views, Swift_Mailer $swift, Dispatcher $events = null)

7.x construct

在第 103 行 void __construct(string $name, Factory $views, Swift_Mailer $swift, Dispatcher $events = null)

您需要更新代码。