在搞新浪SAE的时候,把Lumen装上,须要实现Memcahce和Storage的实现,就用到了Lumen的服务提供者,看了下官方文档和查阅了一些资料,记录一下。(本文在Lumen中实现,Laravel中实现几乎差很少)php
一、app\Http\文件夹下面新建Models文件夹,在Models文件夹下面新建Example.php文件,将app\Http\Models加入到composer.json文件中的autoload类自动加载laravel
"autoload": { "psr-4": { "App\\": "app/", "App\\Http\\Models\\": "app/Http/Models/" } },
Example.php文件建立一个example类json
<?php /* * example演示类 */ namespace App\Http\Models; class Example extends \Illuminate\Database\Eloquent\Model { public function sayHello() { echo "hello,this is a model say"; } }
二、app\Providers\文件夹中建立一个服务提供者ExampleServiceProvider.php。并注册Models中的example类bootstrap
<?php /** * Example服务提供者 */ namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Http\Models\Example; class ExampleServiceProvider extends ServiceProvider { /** * 在容器中注册绑定. * * @return void */ public function register() { $this->app->singleton('App\Http\Models\Example', function($app) { return new Example($app); }); } }
三、将Example服务提供者加入启动,在bootstrap\app.php中加入浏览器
$app->register(App\Providers\ExampleServiceProvider::class);
完成以上操做咱们的Example服务提供者已经添加好了,并启用,下面就来使用它app
四、在Controller中使用它
composer
为了测试,咱们建立了一个路由为example,controller为ExampleController.php文件ide
<?php /** * Example实例Controller */ namespace App\Http\Controllers; use App\Http\Models\Example; class ExampleController extends Controller { public function __construct(Example $example) { $this->example= $example; } public function index() { $this->example->sayHello(); }
五、浏览器中执行路由,应该看到输出了以下内容:测试
hello,this is a model say
小结:this
一、Laravel的服务提供者为你添加各类扩展很方便,也是核心东西。感受就像添加Yii的组件同样,为你扩展各类功能,其实很方便的。Laravel的服务提供者实际上是一个很复杂的东西,这里只是一个简单的实例,更多的东西仍是要看官方给出的文档及实例。
二、Laravel的扩展开发,也是经过服务提供者启动的,好比:
Cache::extend('mongo', function($app){ return Cache::repository(new MongoStore); });
如下为中文翻译官方文档原话:
Cache::extend 的调用能够在新的 Laravel 应用程序默认附带的App\Providers\AppServiceProvider 的 boot 方法中完成,或者你能够创建本身的服务提供者来放置这个扩展
参考文档: