Laravel如何创建服务器提供者实例代码

时间:2022-04-21 12:45:44

前言

Laravel服务器容器:是用于管理类依赖和执行依赖注入的工具。下面我们演示下如何创建服务器提供者,它是Laravel的核心。话不多说了,来一起看看详细的介绍吧

在app/Contracts目录下创建TestContract.php文件,其内容为:

?
1
2
3
4
5
6
<?php
namespace App\Contracts;
 
interface TestContract {
 public function callMe($controller);
}

在app/Services目录下创建TestService.php文件,其内容为:

?
1
2
3
4
5
6
7
8
9
<?php
namespace App\Services;
use App\Contracts\TestContract;
 
class TestService implements TestContract {
 public function callMe($controller){
 dd("Call me from TestServiceProvider in ".$controller);
 }
}

在config/app.php文件中providers中添加内容,以便进行注册:

?
1
2
...
App\Providers\RiakServiceProvider::class,

创建1个服务提供类:

?
1
php artisan make:provider RiakServiceProvider

其内容为:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
namespace App\Providers;
 
use App\Services\TestService;
use Illuminate\Support\ServiceProvider;
 
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("App\Contracts\TestContract",function(){
  return new TestService();
 });
 }
}

在ServiceProvider中提供了2个方法,其中register方法用于注册服务,而boot用于引导服务。

在控制器IndxController中添加如下内容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
namespace App\Http\Controllers;
 
use App;
use Illuminate\Http\Request;
use App\Contracts\TestContract;
 
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方法进行调用。

?
1
2
3
4
public function index(){
 $test = App::make('test');
 $test->callMe('IndexController');
 }

其结果也是一样的。

参考文章:

  • https://laravelacademy.org/post/796.html
  • https://laravelacademy.org/post/93.html

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。

原文链接:http://blog.hellopython.wang/laravel-serviceprovider/