laravel服务提供者和门面及契约整理

Author Avatar
天才在左疯子在后 2月18日
  • 在其它设备中阅读本文章

标签(空格分隔): laravel


服务提供者

通俗意思是: 你家需要水, 服务提供者送水的;
服务提供者生成后的代码

Contracts, ServiceContainer, ServiceProvider, Facades 关系
概念
Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方法

ServiceContainer 实现 Contracts, 具体的逻辑实现

ServiceProvider ServiceContainer 的服务提供者,返回 ServiceContainer 的实例化,供其他地方使用,可以把它加入到 app/config 的 provider 中,会被自动注册到容器中

Facades 简化 ServiceProvider 的调用方式,而且可以静态调用 ServiceContainer 中的方法

php artisan make:provider FooServiceProvider

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\lib\Tools\FooBar\FooBar;

class FooServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        
    }
}

其中 boot 在框架加载初期就载入就提供, 如果你提供的水还需要矿物质什么的 (框架内一些依赖) 就不要在这里进行提供;

在一个继承服务提供者的文件内
boot 方法
register 方法都可以使用

$this->app->bind('test',function(){
    return new Test();
});

方式提供依赖
这种写法理解思路可以参照:链接

在平时方法中使用:

public function two($id=null){
    //从系统容器中获取实例化对象
//    $myfoo = app('test');
//    app()->make('test');
    $myfoo = \App::make('test');
    echo $myfoo->get();
}

或在 方法参数中加上依赖地址或名称;

use App\lib\Tools\FooBar\Test;

public function index(Test $test)

根据文章:地址 整理思路

门面

门面定义

namespace App\CustomFacades;

use Illuminate\Support\Facades\Facade;

class Foo extends Facade
{

    protected static function getFacadeAccessor()
    {
        return 'test';
    }
}

继承 IlluminateSupportFacadesFacade
getFacadeAccessor() 中 return 'test'
代表服务提供者代码中

$this->app->bind('test',function(){
    return new Test();
});

的 test

在 app.php aliases 数组中添加
'Foo' => AppCustomFacadesFoo::class,

契约

参考网址:https://www.jb51.net/article/135189.htm
https://www.cnblogs.com/redirect/p/6087810.html
http://laravelacademy.org/post/769.html
https://www.cnblogs.com/cyforever/p/6139109.html

本文链接:https://fenxiangy.com/note/laravel-fu-wu-ti-gong-zhe-he-men-mian-ji-qi-yue-zh.html
文章属于博主原创,转载请注明本文链接

评论已关闭