Laravel 5.1 邮件文档 - 令人困惑


Laravel 5.1 Documentation for Mail - confusing?

我仍然是Laravel 5.1的新手,但我发现文档非常奇怪和混乱。

例如 - 根据 Laravel 文档,我可以从邮件外观使用 send() 方法来发送电子邮件。

目前为止,一切都好。当我去Laravel API并发现照明支持外观邮件时,这种方法不存在吗? https://laravel.com/api/5.1/Illuminate/Support/Facades/Mail.html

如何了解此方法采用哪些参数以及成功/失败时返回的内容?

那是

因为它使用的是外观模式。

在您的app.php配置文件中,有一个名为"别名"的部分。该部分中有一行:'Mail' => Illuminate'Support'Facades'Mail::class,指向外观,该行返回service container (IoC)中绑定的key,该返回要使用的类/对象。

因此,您需要找到创建绑定的位置。绑定是通过 App::bind('foo', .. )App::singleton('foo', .. )App::instance('foo', .. ) 方法创建的。

我搜索了'mailer',并在创建绑定lluminate'Mail'MailServiceProvider找到了文件:

$this->app->singleton('mailer', function($app) {
    ...
    // this is the class resolved by the IoC.
    $mailer = new Mailer(
        $app['view'], $app['swift.mailer'], $app['events']
    );
    ...
    return $mailer;
});

如您所见,类'Illuminate'Mail'Mailerservice provider中返回,这是使用名为 MailFacade时使用的类。

快速发现立面背后的课程:

您还可以通过转储类名来快速找到类的名称:dd( get_class( Mail::getFacadeRoot() ) );

更多信息

  • 有关服务容器的更多信息:单击!
  • 更多关于Laravel 5外墙的信息:点击!
  • 有关立面图案的更多信息:点击!

外观类基本上是辅助类,用于提供对完成工作的真实类的快速、轻松的访问。关于外墙的优点有很多争论,但这不是为了这个问题。

如果在立面上调用 getFacadeRoot() 方法,它将为您提供立面指向的对象的实例(例如 Mail::getFacadeRoot() == 'Illuminate'Mail'Mailer )。

现在您知道正在使用的实际对象,您可以查找该对象上的方法。在外观上调用的任何方法都将传递到 getFacadeRoot() 返回的对象。因此,当您调用Mail::send()时,您实际上是在调用'Illuminate'Mail'Mailer::send()(尽管是非静态的)。