laravel摸索之路(1) 服务提供者的实际应用

本人也是一名刚刚接触laravel框架不久的php程序员,这个框架可以说跟我之前接触过的mvc框架有很大的不同,但是却被这款框架给征服了。这个系列的博客是我这个学习过程的记录。这里写的东西将和文档上有比较大的不同主要是注重在实践中的应用,期望大家能一起学习讨论简洁的语法

服务提供者

服务提供者在laravel中可以直接理解成一个提供全局服务的业务逻辑代码。服务提供者是laravel的loC容易中的一个组成部分。loC容易是一种用来解决php代码中以来关系的一种设计模式,具体怎么实现这里不多做介绍,感兴趣的同学可以自行百度搜索。

应用举例

我的应用里需要用到一个短信验证的服务功能,我们就可以使用一个服务提供者去注册一个短信服务的功能,将其高度封装后,在需要的控制器内直接访问。这样做的逻辑不仅让业务逻辑看起来更清晰,并且能更好的进行管理

定义一个服务

通常我们会将服务定义在http/Service文件夹下 我们在这下面创建一个SMSService.php

 namespace App\Services;
    public function __construct(){
    }
    //在这里定义了一个发送sms的方法 只需要调用这个方法并传入相应的参数就能发送短信
    public function send($phone,$content){
    }

定义一个服务提供者

有了服务后 我们需要一个服务提供者来提供服务。
创建服务提供者我们可以使用artsian来创建 php artsian make:provider SMSServiceProvider
创建好Provider后,我们只需要将服务注册就行了

 namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Services\SMSServer;

class SMSServiceProvider extends ServiceProvider {

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

    /**
     *定义这个函数并且使用bind函数就能将服务绑定,第一个参数是这个服务的名字
     *第二个参数是一个回调函数,我们在里面将我们服务的类进行了初始化并返回
     * @return void
     */
    public function register()
    {
        $this->app->bind('sms', function () {
            $sms_server = new SMSServer();
            return $sms_server;
        });
    }
}

注册服务提供者到全局中

在laravel中所有的服务都是通过服务提供者来提供的,但是要想在全局中使用服务提供者需要将服务者注册到全局
在config/app.php 中

//在app.php的这个数组中加入这条语句,将服务提供者注册到全局
'providers'=>[
    'App\Providers\SMSServiceProvider',
]

使用服务

将服务提供者注册到全局后,就可以再laravel任意一个地方调用这个服务了。laravel中通过服务提供者调用服务的方式很多 ,这里我只提一种我最常用的

    //这是一个认证控制器 我们需要在这里通过短信验证进行认证
    class AuthController extends Controller {
        //发送手机验证码方法
        private function sendVerifyCode($phone)
        {
            //前面是你的业务逻辑 然后调用send方法发送短信
                app('sms')->send($phone_number, "$verify_code 为您的验证码 请尽快完成注册");
        }
    }

可以看到注册了服务提供者 在全局任意地方调用服务内的方法都将十分方便,使用这种方式可以让我们的代码更加优美

你可能感兴趣的:(laravel,摸索笔记)