使用过Laravel的同学都知道Facades 的强大,下面就让我们一起创建一个Facades 实例。如有不正确的地方,还请不吝赐教。
1. 实现Laravel的自动加载功能
首先建立目录app/lib/Myapp,然后添加目录到composer.json中
"autoload": {
"psr-0":{
"Myapp":"app/lib"
}
}
2. 实现功能类
实现能能类 app/lib/Myapp/Test.php
<?php
/**
* @author brudeke
*/
namespace Myapp;
class Test{
public function do(){
echo 'this is a class';
}
}
3. 实现ServiceProvider
实现app/lib/Myapp/TestServiceProvider.php ,该类主要是将功能类添加到Ioc容器:
<?php
/**
* @author brudeke
*/
namespace Myapp; use Illuminate\Support\ServiceProvider; class TestServiceProvider extends ServiceProvider{ public function register() {
$this->app['test'] = $this->app->share(
function ($app) {
return new \Myapp\Test();
});
}
}
4. 实现Facade 实例
实现app/lib/Myapp/Facades/TestFacades.php, 该类的主要美化,实现成员函数类似静态方法的调用形式
<?php
/**
* @author brudeke
*/
namespace Myapp\Facades; use Illuminate\Support\Facades\Facade; class TestFacades extends Facade{
protected static function getFacadeAccessor()
{
return 'test';
}
}
5. 加载ServiceProvider
在app/config/app.php 中的providers中添加如下配置:
'providers' => array(
'Myapp\TestServiceProvider'
),
在app/config/app.php 中的aliases中添加别名:
'aliases' => array(
'TestClass' => 'Myapp\Facades\TestFacades',
),
接下来就可以在项目中以TestClass::do()的形式使用该功能类了。