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


Posted in PHP onApril 15, 2019

前言

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

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

<?php 
namespace App\Contracts; 

interface TestContract { 
 public function callMe($controller); 
}

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

<?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中添加内容,以便进行注册:

... 
App\Providers\RiakServiceProvider::class,

创建1个服务提供类:

php artisan make:provider RiakServiceProvider

其内容为:

<?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中添加如下内容:

<?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方法进行调用。

public function index(){ 
 $test = App::make('test'); 
 $test->callMe('IndexController'); 
 }

其结果也是一样的。

参考文章:

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

总结

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

PHP 相关文章推荐
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php中动态调用函数的方法
Mar 16 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
php实现的xml操作类
Jan 15 PHP
yii2-GridView在开发中常用的功能及技巧总结
Jan 07 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP getDocNamespaces()函数讲解
Feb 03 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
详解如何实现Laravel的服务容器的方法示例
Apr 15 #PHP
php xhprof使用实例详解
Apr 15 #PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
Apr 15 #PHP
vmware linux系统安装最新的php7图解
Apr 14 #PHP
php7新特性的理解和比较总结
Apr 14 #PHP
PHP7新功能总结
Apr 14 #PHP
PHP7内核CGI与FastCGI详解
Apr 14 #PHP
You might like
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
Python文件和目录操作详解
2015/02/08 Python
Python常见工厂函数用法示例
2018/03/21 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Python笔记之代理模式
2019/11/20 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
Python打印不合法的文件名
2020/07/31 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
工商管理实习自我鉴定
2013/09/28 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
机修工工作职责
2014/02/21 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
2015年外联部工作总结
2015/04/03 职场文书
六一儿童节致辞
2015/07/31 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android