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