Laravel 6 - 第九章 契约

文章目录

Laravel 6 - 第一章 简介
Laravel 6 - 第二章 项目搭建
Laravel 6 - 第三章 文件夹结构
Laravel 6 - 第四章 生命周期
Laravel 6 - 第五章 控制反转和依赖注入
Laravel 6 - 第六章 服务容器
Laravel 6 - 第七章 服务提供者
Laravel 6 - 第八章 门面
Laravel 6 - 第九章 契约
Laravel 6 - 第十章 路由
Laravel 6 - 第十一章 中间件
Laravel 6 - 第十二章 控制器
Laravel 6 - 第十三章 请求
Laravel 6 - 第十四章 响应
Laravel 6 - 第十五章 验证器
Laravel 6 - 第十六章 Artisan命令


目录

  • 文章目录
  • 一、契约(Contracts)
  • 二、自定义契约
    • 1.创建契约接口
    • 2.创建服务类
    • 3.服务提供者
    • 4.使用契约
  • 三. 总结


一、契约(Contracts)

契约(Contracts)主要用于定义一组接口来规范服务的功能结构。使用契约可以定义应用程序应该如何使用这些功能,而不必关心这些功能的具体实现,有助于增加代码的可读性、可维护性和可测试性。

Laravel 6 框架提供了许多内置的契约,如:认证、数据库查询构造器、邮件发送契约等。


二、自定义契约

1.创建契约接口

首先,需要创建一个新的接口来定义契约,建议契约相关文件都放在app/Contracts下,如没有该文件夹则手动创建即可。如:创建一个支付相关的契约,可先创建 PayContract.php 接口文件,并定义两个方法:procPayment()refundPayment(),如下:
在这里插入图片描述

2.创建服务类

1中的例子,创建服务类 PayService,用于实现 PayContract,如下:
在这里插入图片描述

3.服务提供者

12中的例子,根据( Laravel 6 - 第七章 服务提供者 )创建一个新的服务提供者,如下:
在这里插入图片描述
也可直接在 app/Providers/AppServiceProvider.php 中注册 服务供者

4.使用契约

接上述例子,注册好 服务提供者 之后,在控制器或其他类中,可以这样使用契约,如下:
在这里插入图片描述


三. 总结

由于代码现在依赖于契约而不是具体的实现类。因此,不需要担心具体的实现细节,更不用在大型复杂的类中跟踪哪些方法可用。

通过自定义契约可以确保应用程序保持清晰、模块化和可测试的结构,同时允许开发人员轻松地替换或扩展组件和服务。

:官方文档中有一个章节是比较 契约门面的,其中说到:多数情况下,每个门面都有一个等效的契约。根据官方文档内容很容易导致大家理解混淆;其实, 契约门面 的功能完全不同,作用也不同,具体使用哪个需要大家根据实际项目情况使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2982235.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

卓越体验的秘密武器:评测ToDesk云电脑、青椒云、天翼云的稳定性和流畅度

大家好,我是猫头虎。近两年随着大模型的火爆,我们本地环境常常难以满足运行这些大模型的硬件需求。因此,云电脑平台成为了一个理想的解决方案。今天,我将介绍并评测几款主流云电脑产品:ToDesk云电脑、天翼云电脑和青椒…

Mysql--基础知识点--0.1--脏读、不可重复读、幻读

1 脏读、不可重复读、幻读 1.1 脏读 如果一个事务读到了另一个事务已修改且未提交的数据,则发生了脏读现象。 1.2 不可重复读 在一个事务里面多次读取同一个数据,若前后两次读到的数据不一致,则发生不可重复读现象。 1.3 幻读 在一个…

Laravel 6 - 第十四章 响应

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

PMP和华为项目管理认证有哪些区别?

PMP和华为项目管理认证都是项目管理领域的权威认证,那么这两者有哪些区别呢? 01 侧重点不同 PMP主要以理论为主,是一套结构化项目管理思维和方法论,注重传统的项目管理方法和流程,强调项目的计划、执行和控制&#…

hover显示播放遮罩层效果

我们都知道视频列表其实是一个封面列表,鼠标放上去时,有反馈:即hover时显示播放遮罩层,点击,跳转到对应的视频播放页。这是目前主流视频网站的一个通用效果。 我们在实现时应该理清思路: 1、每个视频位置处放的是封面图片 2、播放按钮遮罩层需完全覆盖封面图片,并且正…

Spring三级缓存源码解析

Spring三级缓存 前置知识三级缓存定义SpringBean生命周期 Bean的初始化getSingleton 分析加入一级缓存 CreateBean过程(A)A填充属性BB填充属性A,执行getSingleton(A)B完成初始化 前置知识 三级缓存定义 public class DefaultSingletonBeanRegistry ext…

Vue3 实现 Three.js粒子特效

效果 <template><div id"waves" /> </template><script setup> import { ref, onMounted, onUnmounted } from "vue"; import * as THREE from "three";const amountX ref(50); const amountY ref(50); const color …

ArcGIS Pro教程系列: ArcGIS Pro 将 Excel 表转换为面

数据的存在形式是多样的&#xff0c;这其中有相当一部分数据是Excel表格&#xff0c;这里给大家讲解一下如何使用 ArcGIS Pro 将 Excel 表转换为面要素&#xff0c;希望能对你有所帮助。 01&#xff1a;导入数据 02 添加XY数据 在菜单栏上选择地图&#xff0c;点击添加数据…

如何打造自己的O2O平台系统:商业模式探索与实践

大家好&#xff0c;我是微三云周丽&#xff0c;今天给大家分析当下市场比较火爆的商业模式&#xff01; 小编今天跟大伙们分享什么是O2O平台系统&#xff1f; 在数字化浪潮的推动下&#xff0c;O2O&#xff08;Online to Offline&#xff09;商业模式已成为连接线上与线下、商家…

3d模型合并怎么样不丢材质?---模大狮模型网

在3D设计中&#xff0c;合并模型是常见的操作&#xff0c;它可以帮助设计师将多个单独的模型组合成一个&#xff0c;从而简化场景并提高渲染效率。然而&#xff0c;合并模型时常常会面临一个棘手的问题&#xff1a;如何确保合并后的模型不丢失原有的材质?本文将探讨如何在合并…

C# 项目:导线计算 / 坐标转换 / 曲线放样 / 水准网 / 导线网平差

文章目录 Part.I IntroductionPart.II 软件简介Chap.I 导线计算Chap.II 坐标转换Chap.III 曲线放样Chap.IV 水准网 / 导线网平差 Part.III 软件使用过程中可能遇到的问题Reference Part.I Introduction 本文将对几个基于 C# 开发的软件进行简要的介绍&#xff0c;这些软件都是…

MT3028 正反卡牌

思路&#xff1a;贪心 &#xff1b;注意开long long 贪心策略&#xff1a;为了让结果最小&#xff0c;需要减去最大的值&#xff0c;加上较小的值。 第i张卡牌正反两面的值分别为a[i]和b[i]&#xff0c;不妨设a[i]>b[i]。i和j卡牌比较suma[]b[]&#xff0c;若sum[i]>su…

最值得收藏的30个AI工具

万能聊天类 ChatGPT4.0&#xff1a;使用范围最广的 https://chat.openai.com/ NewBing&#xff1a;使用比较困难&#xff0c;要安装插件 https://www.bing.com/new 谷歌巴德&#xff1a;国内基本无缘访问使用&#xff0c;能访问的方式不能说。 http://bard.google.com 百…

解决DataGrip连接MySQL8时出现时区错误问题

解决办法&#xff1a;在url后面拼接时区参数 ?serverTimezoneAsia/Shanghai

c++实数排序

例&#xff1a;数的三次方跟 描述&#xff1a;给定一个浮点数n&#xff0c;求它的三次方根。 输入描述&#xff1a;一个浮点数 输出描述&#xff1a;问题的解 保留6位小数 #include<bits/stdc.h> using namespace std; double n,eps1e-8; bool check (double x){retu…

【InternLM实战营---第六节课笔记】

一、本期课程内容概述 本节课的主讲老师是【樊奇】。教学内容主要包括以下三个部分&#xff1a; 1.大模型智能体的背景及介绍 2. Lagent&AgentLego框架介绍 3.Lagent&AgentLego框架实战 二、学习收获 智能体出现的背景 智能体的引入旨在克服大模型在应对复杂、动态任…

齐护K210系列教程(九)_## 播放音频文件wav

播放音频文件wav 播放音频只支持带喇叭的型号&#xff1a;AIstart_掌机、AIstart_Mini AIstart可以播放SD卡中的wav音频文件&#xff0c;在编写程序前请将文件准备好存放到SD卡内。 注&#xff1a;播放wav格式音频&#xff1a;wav格式的音频频率不能超过16KHZ。 1&#xff0…

Java高级阶段面试题库(Redis数据库、MQ消息队列、kafka、SpringBoot + SpringCloud、MySQL、JVMJUC、其它)

文章目录 1. Redis数据库篇(忽略)1.1 简单介绍一下redis1.2 单线程的redis为什么读写速度快?1.3 redis为什么是单线程的?1.4 redis服务器的的内存是多大?1.5 为什么Redis的操作是原子性的&#xff0c;怎么保证原子性的&#xff1f;1.6 你还用过其他的缓存吗&#xff1f;这些…

可持续发展:制造铝制饮料罐要消耗多少资源?

铝制饮料罐是人们经常使用的日常用品&#xff0c;无论是在购物、午休还是在自动售货机前选择喝什么的时候&#xff0c;很少有人会想知道装他们喝的饮料的罐子到底是如何制成的&#xff0c;或者这些铝罐的原材料是如何进出的。 虽然有化学品和一些合金进入铝饮料罐制造过程或成为…

CSS3 max/min-content及fit-content、fill-available值的详解

c3中对width的值多了几个值&#xff1a;fill-available, max-content, min-content, 以及fit-content。 1.width:fill-available 我们在页面中扔一个没有其他样式的<div>元素&#xff0c;则&#xff0c;此时&#xff0c;该<div>元素的width表现就是fill-availabl…