我仍然是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'Mailer
在service provider
中返回,这是使用名为 Mail
的Facade
时使用的类。
快速发现立面背后的课程:
您还可以通过转储类名来快速找到类的名称:dd( get_class( Mail::getFacadeRoot() ) );
更多信息
- 有关服务容器的更多信息:单击!
- 更多关于Laravel 5外墙的信息:点击!
- 有关立面图案的更多信息:点击!
外观类基本上是辅助类,用于提供对完成工作的真实类的快速、轻松的访问。关于外墙的优点有很多争论,但这不是为了这个问题。
如果在立面上调用 getFacadeRoot()
方法,它将为您提供立面指向的对象的实例(例如 Mail::getFacadeRoot() == 'Illuminate'Mail'Mailer
)。
现在您知道正在使用的实际对象,您可以查找该对象上的方法。在外观上调用的任何方法都将传递到 getFacadeRoot()
返回的对象。因此,当您调用Mail::send()
时,您实际上是在调用'Illuminate'Mail'Mailer::send()
(尽管是非静态的)。