搜尋
首頁後端開發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記錄:PHP日誌分析的最佳實踐PHP記錄:PHP日誌分析的最佳實踐Mar 10, 2025 pm 02:32 PM

PHP日誌記錄對於監視和調試Web應用程序以及捕獲關鍵事件,錯誤和運行時行為至關重要。它為系統性能提供了寶貴的見解,有助於識別問題並支持更快的故障排除

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

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

簡化的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尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境