Laravel的服务提供者的作用是什么?
1). 当前使用的 Laravel 版本?#
Laravel8.83.9
根据网上的教程,我跟着写了一遍服务提供者相关代码,我先给大家看看吧,模拟发短信功能的。
第一步:新建一个接口:
namespace App\Services;
interface SmsService
{
public function send($phone, $content);
}
第二步:新建短信具体功能类,实现 SmsService 接口:
namespace App\Services;
class AliSms implements SmsService
{
public function send($phone, $content)
{
return "阿里发短信平台手机号:" . $phone . " 内容:" . $content;
}
}
这里假设是阿里的发短信平台。
第三步:新建服务提供者:
php artisan make:provider SmsServiceProvider
会在 app\Providers 下面生成 SmsServiceProvider:
namespace App\Providers;
use App\Services\AliSms;
use Illuminate\Support\ServiceProvider;
class SmsServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->singleton('sms', function () {
return new AliSms();
});
}
}
第四步:在 config\app.php providers 数组中加入 App\Providers\SmsServiceProvider::class,
第五步:新建控制器:
namespace App\Http\Controllers;
use Illuminate\Support\Facades\App;
use App\Services\SmsService;
class BlackController extends Controller
{
public function index()
{
echo app('sms')->send("18700000000","你好呀");
}
}
运行之后成功打印:阿里发短信平台手机号:18700000000 内容:你好呀
代码是成功运行的,可就是不明白为什么需要这么复杂的过程,有些人会说以后如果换一个短信平台,只要改服务提供者就可以了,业务代码不需要改。但是,我觉得如果真是这样,我也可以写一个单独的短信发送公共类,在刚刚的控制器里面调:SendClass::send (“18700000000”,” 你好呀”); 以后要改其他平台发送短信,我也就改 send 方法而已,调用方也无需改。
所以不清楚服务提供者真正的用途是什么?有没有知道的举个通俗一点的场景说一说。
推荐文章: