laravel中的Contracts, ServiceContainer, ServiceProvider, Facades关系

Contracts, ServiceContainer, ServiceProvider, Facades 

  1. Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方法
  2. ServiceContainer  实现Contracts,具体的逻辑实现
  3. ServiceProvider    ServiceContainer的服务提供者,返回ServiceContainer的实例化,供其他地方使用,可以把它加入到app/config的provider中,会被自动注册到容器中
  4. Facades     简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法

实现

Contracts接口可以写或不写,这里就不定义了

定义一个ServiceContainer,实现具体的功能

namespace App\Helper;
class MyFoo
{
    public function add($a, $b)
    {
        return $a+$b;
    }
}

定义一个ServiceProvider供其他地方使用ServiceContain

<?php
namespace App\Providers;

use App\Helper\MyFoo; //要服务的Container
use Illuminate\Support\ServiceProvider;
use App;

class MyFooServiceProvider extends ServiceProvider
{
    public function boot(){}
    //注册到容器中
    public function register()
    {
        //可以这么绑定,这需要use App;
        App::bind("myfoo",function(){
            return new MyFoo();
        });
        //也可以这么绑定
        $this->app->bind("myfoo", function(){
            return new MyFoo();
        });
    }
}

在app/config.php中的providers数组中加入ServiceProvider,让系统自动注册

App\Providers\MyFooServiceProvider::class,

这时候就可以使用了,假设在控制器中使用

public function two($id=null)
{
    //从系统容器中获取实例化对象
    $myfoo = App::make("myfoo");
    echo $myfoo->add(1,2);
}

这样太麻烦,还需要用make来获取对象,为了简便,就可以使用门面功能,定义门面MyFooFacade

namespace App\Facades;
use Illuminate\Support\Facades\Facade;

class MyFooFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        //这里返回的是ServiceProvider中注册时,定义的字符串
        return ‘myfoo‘;
    }
}

在控制器里就可以直接调用了

use App\Facades\MyFooFacade;
public function two($id=null)
{
    //从系统容器中获取实例化对象
    $myfoo = App::make("myfoo");
    echo $myfoo->add(1,2);
    //使用门面
    echo MyFooFacade::add(4,5);
}
 

总的来说,自定义了一个类,为了方便在其他别处使用,便可以使用服务提供者和门面

时间: 2024-10-05 06:17:38

laravel中的Contracts, ServiceContainer, ServiceProvider, Facades关系的相关文章

Laravel中利用队列发送邮件的方法示例

https://www.jb51.net/article/121647.htm 本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间.下面讲解下Laravel中队列的使用 1.配置文件 config/queue.php ? 1 2 3 4 5 6 7 8 9 1

Laravel中的日志与上传

PHP中的框架众多,我自己就接触了好几个.大学那会啥也不懂啥也不会,拿了一个ThinkPHP学了.也许有好多人吐槽TP,但是个人感觉不能说哪个框架好,哪个框架不好,再不好的框架你能把源码读上一遍,框架的设计思想理解了也能学到好多东西.况且有好多东西自己还不理解,所以认真学习一个框架这还是可以学不少东西的. 还是先说说Laravel吧,现在已经到5.2了.就我自己来说之前没有接触过laravel,但是学习过laravel之后感觉这个框架确实不错,并且老外用的不亦乐乎.他的开发社区还可以,文档比较齐

在Laravel中一步一步创建Packages

首先要看一下Laravel官方文档,这是最新4.2的文档,如果想看中文的话点击此处,基本一样,这个github上的库setup-laravel4-package,也是一步一步介绍如何创建一个包,并关联相关资源. 这里以创建一个account包为例: 1.如果是首次使用php artisan workbench命令,需要配置app/config/workbench.php中的name和email,在生成包的时候会使用这些信息 2.在项目根目录使用,下面的命令生成最初始的包目录结构,其中--reso

laravel中redis的配置和使用

引入redis composer require predis/predis 会在composer.json中引入最新版本的predis composer update 把下载predis 库加入到vendor,命令执行成功后,如图: 配置redis 说到laravel 中redis 的配置,其实默认项目中已经有了相关配置,只是默认没有使用.默认使用的是: 项目 使用类型 CACHE_DRIVER file SESSION_DRIVER file 添加redis数据库使用 'redis' =>

Laravel中Redis的使用

安装 laravel中使用redis首先需要你通过 Composer 安装 predis/predis 包: composer require predis/predis 配置 redis的配置文件是:config/database.php 'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PA

storm源码之理解Storm中Worker、Executor、Task关系【转】

[原]storm源码之理解Storm中Worker.Executor.Task关系 Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:1. Worker(进程)2. Executor(线程)3. Task 下图简要描述了这3者之间的关系:                                                    1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服

laravel中redis个方法的使用

在laravel中使用redis自带方法的时候会发现许多原生的方法都不存在了,laravel对其进行了重新的封装但是在文档中并没有找到相关的资料最后在 \vendor\predis\predis\src\Profile\RedisProfile.php 该文件的createCommand方法重打印出 $this->commands 发现许多方法名是被重写的,以下为所有重新定义的方法名 array(151) { ["EXISTS"]=> string(24) "Pr

javascript中函数调用,函数实例化,函数三者关系

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> <script type="text/javascript" ></script> <script type="text/javascript"> // a

苹果开发——设置iTunes Connect中的Contracts, Tax, and Banking

原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137485857701?suggestedreading 如果要在苹果商城发布收费应用或在苹果应用中使用内购收费,首先需要设置你的iTunes Connect的Contracts, Tax, and Banking. 首先打开https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa 登录到iTunes Connect