接着上一篇阐述Contracts的博文,这一篇来写一写我理解的Facades。
Facades 为应用程序的 服务容器 中可用的类提供了一个「静态」接口。说白了,就是让服务容器中的类用起来更方便些。
我理解的Facades在Lavarel结构中的位置,在上一篇本博文中已经上图说明,大家可点击参阅。下面写一些怎么使用Facades。
第一步,写一个类继承Facade:
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Hello extends Facade
{
protected static function getFacadeAccessor()
{
return 'Hello';
}
}
这里的return的”Hello”是上一篇博文中,Contract接口的别名。通过这一步,这个Facade就与Contract联系起来了。
第二步,在Config\app.php中给它一个别名,在’aliases’ => []中加入这一行代码即可:
'FacadeHello'=>App\Facades\Hello::class,
第三步,可以使用了,在控制器中:
<?php
namespace App\Http\Controllers;
use FacadeHello;
class DiaryController extends Controller
{
/**
* Display a list of all of the user's diaries.
*
* @return Response
*/
public function index(){
return view('diaries.index',[
'hello'=>FacadeHello::hello(),
]);
}
}
说明:
- 这里use的 FacadeHello 就是给这个Facade起的别名(当然不用别名也可以)。
- 通过FacadeHello就可以直接用Contract接口实现类中的方法了。
通过对Contracts和Facades的学习,我认为后者使用起来应该更方便一些。看中文社区说,使用Contracts可以进一步降低耦合度,这一点还不是想得很明白,请前辈指点。
另外,尊重版权,转载请注明出处,谢谢!
by:Vin