搜索
首页后端开发php教程[Laravel 5 Fundamentals] 25 – When You Want a View Partial to Always Receive Data

Service Container

前言

上一节,我们对标签的选择方面做了一些优化,使得标签的选择更加合理。这节我们来看看 service container 。

说明

开发环境:Windows 7

Laravel 版本: 5+

IDE: Phpstorm

第25节了,我们讲了很多东西,但是还没涉及过 service container ,下面我们讲一下这个到底是什么。

Service Container

所谓的 Service Container 是一个管理类依赖或者说依赖注入的一个管理器。什么是“依赖注入”,先说“依赖”,一提“依赖”,那必须参与者大于等于2才能形成“依赖”关系,对于类也一样,一个类可能会用到另一个类,也就是产生了依赖的情况;“注入”是什么鬼,英文是“injected”,或者你知道“注射”,在医院,你得了什么病,需要什么要,给你打什么针,输什么液,都要看你具体的病情病症,然后再给你“注入”这些药物。那么合起来“依赖注入”,就是说什么时候需要这个“依赖”关系,什么时候“注入”。

具体在编程中,依赖注入的方式是通过构造函数传参或者 setter 方法来实现。

打开 routes.php ,这里放着我们所有的路由。在文件中添加一个路由:

Route::get('bar',function(Bar $bar){    dd($bar);}); 

有点编程经验的同学都知道,这个路由是找不到 bar 类的,因为我们压根就没定义过这个类,运行的话肯定会报错。(就不用试验了吧,你可以自己试验。)

但是我们在这个路由上面再添加一个 bar 类,情况就不一样了:

class Bar{} 

我的网页上打印的是 “bar {#143}” ,应该是 $bar 的地址之类的。

但是你有没有发现,我们并没有显式的给那个闭包方法提供一个 bar 类的实例化对象,例如如下:

$bar = new Bar(); 

之类的语句,但是 Laravel 能找到那个类。

这就是 Service Container 的功能所在,它会通过 php 的一个核心机制“反射”来递归查找该类,然后,Service Container 会自动绑定(binding)该类。

那么有自动就有手动,如果想手动绑定(binding)的话,也可以:

App::bind('Bar',function(){    return new Bar();}); 

添加了上面的代码之后,你就已经通过 App 类的静态方法 bind() 绑定了那个类。还是一开始那句话,你即使不绑定,Laravel 会帮你绑定。

绑定接口

当你谢了一个接口需要实现的时候,这时候,可以通过绑定来把接口绑定到要实现该接口的类上。比如说:

interface BarInterface{}class Bar implements BarInterface{}Route::get('bar',function(BarInterface $bar){                dd($bar);}); 

此时你怎么能让 Service Container 知道你的类 Bar 实现 BarInterface 呢?看下面:

interface BarInterface{}class Bar implements BarInterface{}App:bind('BarInterface','Bar');Route::get('bar',function(BarInterface $bar){                dd($bar);}); 

或者:

interface BarInterface{}class Bar implements BarInterface{}App:bind('BarInterface','Bar');Route::get('bar',function(){    $bar = App::make(['BarInterface']);    dd($bar);}); 

就这么简单。

回到当初

当初我们在学习 Laravel 的路由的时候,不知道你还有无印象,为什么教程里面教的是:

Route::get('/home', 'HomeController@index'); 

而最开始的 routes.php 里面却是这样的式儿的:

Route::get('/', function () {        return view('welcome');    }); 

其实他们的功能都一样,只不过为了体现 MVC 的理念,各司其职,写到各自的类中,显得整齐。

总结

今天的内容其实就是想告诉我们 Laravel 的 Service Container 这个容器,它的用途和功能。它基于反射机制进行递归查找类,你可以手动,也可以自动,根据自己的需求来。更多的内容可以参考官方文档: Service Container。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

PHP记录:PHP日志分析的最佳实践PHP记录:PHP日志分析的最佳实践Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

解释PHP中晚期静态结合的概念。解释PHP中晚期静态结合的概念。Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

自定义/扩展框架:如何添加自定义功能。自定义/扩展框架:如何添加自定义功能。Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),