前言
Laravel服务器容器:是用于管理类依赖和执行依赖注入的工具。下面我们演示下如何创建服务器提供者,它是Laravel的核心。话不多说了,来一起看看详细的介绍吧
在app/Contracts目录下创建TestContract.php文件,其内容为:
代码语言:javascript复制<?php
namespace AppContracts;
interface TestContract {
public function callMe($controller);
}
在app/Services目录下创建TestService.php文件,其内容为:
代码语言:javascript复制<?php
namespace AppServices;
use AppContractsTestContract;
class TestService implements TestContract {
public function callMe($controller){
dd("Call me from TestServiceProvider in ".$controller);
}
}
在config/app.php文件中providers中添加内容,以便进行注册:
代码语言:javascript复制...
AppProvidersRiakServiceProvider::class,
创建1个服务提供类:
代码语言:javascript复制php artisan make:provider RiakServiceProvider
其内容为:
代码语言:javascript复制<?php
namespace AppProviders;
use AppServicesTestService;
use IlluminateSupportServiceProvider;
class RiakServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this- app- bind("AppContractsTestContract",function(){
return new TestService();
});
}
}
在ServiceProvider中提供了2个方法,其中register方法用于注册服务,而boot用于引导服务。
在控制器IndxController中添加如下内容:
代码语言:javascript复制<?php
namespace AppHttpControllers;
use App;
use IlluminateHttpRequest;
use AppContractsTestContract;
class IndexController extends Controller
{
public function __construct(TestContract $test){
$this- test = $test;
}
public function index(){
$this- test- callMe("IndexController");
}
}
访问浏览器可以得到如下的结果:
“Call me from TestServiceProvider in IndexController”
另外,还可以使用App的make方法进行调用。
代码语言:javascript复制public function index(){
$test = App::make('test');
$test- callMe('IndexController');
}
其结果也是一样的。
参考文章:
- https://laravelacademy.org/post/796.html
- https://laravelacademy.org/post/93.html