- Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方法
ServiceContainer 实现Contracts,具体的逻辑实现
ServiceProvider ServiceContainer的服务提供者,返回ServiceContainer的实例化,供其他地方使用,可以把它加入到app/config的provider中,会被自动注册到容器中
Facades 简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法
ServiceContainer :实现Contracts,具体的逻辑实现
ServiceProvider :ServiceContainer的服务提供者,返回ServiceContainer的实例化,供其他地方使用,可以把它加入到app/config的provider中,会被自动注册到容器中
Facades: 简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法
-
操作示例
首先先在:app\Providers\Dava目录下创建DavaServiceProvider.php文件<?php /** * Created by PhpStorm. * User: dava * Date: 2018/5/11 * Time: 17:54 */ namespace App\Providers\Dava; use App\Http\Controllers\test; use Illuminate\Support\ServiceProvider; class DavaServiceProvider extends ServiceProvider { /** * Bootstrap the application services.(引导应用程序服务。) * * @return void */ public function boot() { // } /** * Register the application services.(注册应用程序服务。) * * @return void */ public function register() { // $this->app->bind('dava',function(){ return new test(); //要操作的对象 }); } }
第二,在dava-project\bootstrap目录下的app.php 给应用注册服务,这里注册的服务都是服务提供者 提供 位置都在 \App\Providers下
$app->register(\App\Providers\Dava\DavaServiceProvider::class);
第三,调用刚刚注册的服务,你可以选择在任意可以掉用方法的地方掉用
<?php
/**
* Created by PhpStorm.
* User: dava
* Date: 2018/5/8
* Time: 15:17
*/
namespace App\Http\Controllers\Admin\Messages;
use App\Define\Common;
use App\Http\Controllers\Controller;
use App\Logic\Admin\Messages\AdminMessagesLogic;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Dava;
class GetList extends Controller
{
public function run() {
//没有引入Facades的调用方式,但是这样不太友好,还有优化
$myfoo = App::make("dava");
echo $myfoo->Test();
//引入Facades的调用方式
echo Dava::Test();die;
}
}
第四,引用Facades模式,找到\vendor\illuminate\support\Facades目录,
并且再里面创建Dava.php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Dava Facade
{
protected static function getFacadeAccessor()
{
//这里返回的是ServiceProvider中注册时,定义的字符串
return 'dava';
}
}
完工
网友评论