婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 通過源碼解析Laravel的依賴注入

通過源碼解析Laravel的依賴注入

熱門標簽:江蘇外呼電銷機器人報價 離石地圖標注 電話機器人危險嗎 400電話辦理福州市 400電話申請方法收費 南寧高頻外呼回撥系統哪家好 長沙crm外呼系統業務 深圳外呼系統收費 專業電話機器人批發商

前言

眾所周知,php的框架數不勝數,近幾年,一個以優雅著稱的框架,漸漸被國內phper所知道,并且開始使用,但是larave有一個很明顯的缺點就是,他的文檔內容少的可憐。

本文將給大家詳細介紹關于Laravel依賴注入的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

在 Laravel 的控制器的構造方法或者成員方法,都可以通過類型約束的方式使用依賴注入,如:

public function store(Request $request)
{
 //TODO
}

這里 $request 參數就使用了類型約束,Request 是一個類:\Illuminate\Http\Request,表示參數必須是這個類或子類。

本文通過分析 Laravel 的源碼,看為什么方法中不需要傳入實例就可以直接使用 Request 呢?只是框架自動幫我們實例化并傳參了。

1.路由定義

從源頭開始看起,在路由定義文件中定義了這么一個路由:

Route::resource('/role', 'Admin\RoleController');

這是一個資源型的路由,Laravel 會自動生成增刪改查的路由入口。

本文開頭的 store 方法就是一個控制器的方法,圖中可見路由定義的 Action 也是:App\Http\Controllers\Admin\RoleController@store

路由方法解析

根據路由定義找到控制器和方法,執行具體的方法在 dispatch 方法中實現。

(文件:vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php)

public function dispatch(Route $route, $controller, $method)
{
 $parameters = $this->resolveClassMethodDependencies(
  $route->parametersWithoutNulls(), $controller, $method
 );
 
 if (method_exists($controller, 'callAction')) {
  return $controller->callAction($method, $parameters);
 }
 
 return $controller->{$method}(...array_values($parameters));
}

首先 resolveClassMethodDependencies 方法,“顧名思義”是根據類的方法參數獲取依賴對象,然后再調用類的方法并把對象參數注入。

如果有多個依賴對象,也會 foreach 依次解析出來作為參數注入。

獲取依賴對象示例的代碼:

protected function resolveClassMethodDependencies(array $parameters, $instance, $method)
{
 if (! method_exists($instance, $method)) {
  return $parameters;
 }
 
 return $this->resolveMethodDependencies(
  $parameters, new ReflectionMethod($instance, $method)
 );
}

這里重點就是用到了 PHP 的反射,注意 RelectionMethod 方法,它獲取到類的方法參數列表,可以知道參數的類型約束,參數名稱等等。

這里的 $instance 參數就是 RoleController 控制器類,$method 參數就是方法名稱 strore.

2.獲取依賴對象的示例

從方法的參數中獲取了依賴對象的約束類型,就可以實例化這個依賴的對象。

protected function transformDependency(ReflectionParameter $parameter, $parameters)
{
 $class = $parameter->getClass(); 
 // If the parameter has a type-hinted class, we will check to see if it is already in
 // the list of parameters. If it is we will just skip it as it is probably a model
 // binding and we do not want to mess with those; otherwise, we resolve it here.
 if ($class  ! $this->alreadyInParameters($class->name, $parameters)) {
  return $parameter->isDefaultValueAvailable()
   ? $parameter->getDefaultValue()
   : $this->container->make($class->name);
 }
}

根據類名從容器中獲取對象,這個綁定對象實例的過程在服務提供者中先定義和了。

然后把實例化的對象傳入到 store 方法中,就可以使用依賴的對象了。

3.關于 PHP 反射

舉個使用 ReflectionMethod 的例子。

class Demo
{
 private $request;
 public function store(Request $request)
 {
 }
}

打印出 new ReflectionMethod(Demo::class, ‘store') 的內容如圖:

可以得出這個方法的參數列表,參數的約束類型,如 typeHint,Illuminate\Http\Request.

根據類名可以從容器中獲取一開始通過服務提供者綁定的實例。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • php+laravel依賴注入知識點總結
  • laravel框架中你所用到的依賴注入詳解
  • Laravel實現構造函數自動依賴注入的方法
  • PHP依賴注入容器知識點淺析
  • php依賴注入知識點詳解
  • php中的依賴注入實例詳解
  • php反射學習之依賴注入示例
  • PHP依賴注入原理與用法分析
  • 詳解Laravel框架的依賴注入功能

標簽:曲靖 株洲 白酒營銷 南京 南昌 太原 興安盟 濱州

巨人網絡通訊聲明:本文標題《通過源碼解析Laravel的依賴注入》,本文關鍵詞  通過,源碼,解析,Laravel,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《通過源碼解析Laravel的依賴注入》相關的同類信息!
  • 本頁收集關于通過源碼解析Laravel的依賴注入的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    不卡av在线免费观看| 欧美日韩精品一区二区三区| 国产不卡视频一区二区三区| 欧美精三区欧美精三区 | 精品久久久久久久久久久久包黑料| 国产 欧美在线| 日韩精品免费专区| 蜜臀av一级做a爰片久久| 欧美精品一区二区三区蜜桃| 亚洲一区二区精品久久av| 99久久99久久综合| 精品在线观看免费| 欧美精品一区二区蜜臀亚洲| 蜜桃久久久久久| 亚洲一区二区在线播放相泽| 亚洲影院久久精品| 欧美一a一片一级一片| 成人深夜在线观看| 亚洲欧洲日韩在线| 色综合久久久久久久久久久| 免费在线观看不卡| 欧美白人最猛性xxxxx69交| 亚洲不卡av一区二区三区| 成人h动漫精品一区二区| 精品剧情在线观看| 国产精品第四页| 精品视频1区2区| 五月激情六月综合| 日韩一区二区在线看| 91原创在线视频| 亚洲啪啪综合av一区二区三区| 欧美激情一区二区三区四区| 粉嫩13p一区二区三区| 亚洲精品国产a久久久久久 | 风间由美一区二区三区在线观看 | 久久久www成人免费无遮挡大片| 激情综合五月婷婷| 欧美tk丨vk视频| 久久亚洲精华国产精华液| av电影在线观看一区| 日韩经典一区二区| 久久精品国产亚洲一区二区三区| 欧美四级电影网| 精品一区二区久久久| 一区二区三区免费| 日本一区二区三区四区| 国产精品国产三级国产普通话99 | 成人视屏免费看| 日韩电影在线免费| 国产成人小视频| 久久精品国产亚洲一区二区三区| 亚洲午夜影视影院在线观看| 一本到高清视频免费精品| 欧洲亚洲精品在线| 97久久精品人人爽人人爽蜜臀| 激情六月婷婷久久| 亚洲欧洲一区二区在线播放| 日韩高清一区在线| 日韩在线卡一卡二| 亚洲丰满少妇videoshd| 国产成人一区二区精品非洲| 国产精品久久久久一区二区三区| 国产午夜精品久久久久久免费视| 精品福利视频一区二区三区| 91精品国产色综合久久| 91精品国产免费久久综合| 欧美性一级生活| 蜜乳av一区二区| 91国模大尺度私拍在线视频| 成人免费高清在线| 成人爱爱电影网址| 久久亚洲一区二区三区四区| 国产拍揄自揄精品视频麻豆| 久久久三级国产网站| 成人高清在线视频| xfplay精品久久| 久久久91精品国产一区二区精品 | 亚洲男人天堂av网| 亚洲精品乱码久久久久久| 日韩久久一区二区| 中文字幕一区日韩精品欧美| 老司机一区二区| 国产精品综合一区二区三区| 国产91精品欧美| 亚洲精品在线三区| 日本一区二区综合亚洲| 亚洲视频小说图片| 欧美日韩国产另类不卡| 亚洲精品伦理在线| 亚洲大尺度视频在线观看| 手机精品视频在线观看| 26uuu精品一区二区| 国产精品一级片| 色噜噜夜夜夜综合网| 欧美调教femdomvk| 久久人人爽爽爽人久久久| 麻豆成人91精品二区三区| 国产精品亚洲视频| 91成人看片片| 一区在线中文字幕| 麻豆成人av在线| 成人性色生活片免费看爆迷你毛片| 久久99精品久久久久| 欧美一级欧美三级| 中文字幕+乱码+中文字幕一区| 一区二区三区在线视频免费| 亚洲三级在线观看| 一本一道波多野结衣一区二区| 91精品中文字幕一区二区三区| 国产午夜精品一区二区三区嫩草| 91国产丝袜在线播放| 亚洲国产精品精华液网站| 国产久卡久卡久卡久卡视频精品| 一本一道久久a久久精品综合蜜臀| 91麻豆免费看片| 国产精品久久久久影院亚瑟| 日日夜夜精品视频天天综合网| 欧美一区二区三区的| 久久成人综合网| 国产香蕉久久精品综合网| 91玉足脚交白嫩脚丫在线播放| 亚洲国产精品久久不卡毛片| 精品国产一区二区精华| 99热精品国产| 日本 国产 欧美色综合| 久久综合给合久久狠狠狠97色69| 成人免费va视频| 日韩精品久久理论片| 国产女人18毛片水真多成人如厕 | 国产女同性恋一区二区| 91一区在线观看| 日本不卡一区二区三区| 国产日韩av一区二区| 在线视频欧美精品| 韩日欧美一区二区三区| 中文字幕精品一区二区精品绿巨人| 在线视频一区二区免费| 国产一区二区在线观看视频| 一区二区三区四区视频精品免费| 日韩三区在线观看| www.日韩大片| 看电影不卡的网站| 亚洲免费观看高清| 精品久久久网站| 91高清视频在线| 国产河南妇女毛片精品久久久| 夜夜嗨av一区二区三区网页| 26uuu欧美| 3d动漫精品啪啪1区2区免费| 99视频在线观看一区三区| 国产在线不卡一卡二卡三卡四卡| 亚洲va天堂va国产va久| 亚洲欧洲精品天堂一级| 精品国产乱码久久久久久闺蜜| 欧美在线999| 丁香激情综合五月| 六月婷婷色综合| 亚洲成人免费av| 亚洲欧洲综合另类| 欧美国产精品一区二区| 日韩网站在线看片你懂的| 欧美午夜精品一区| 在线看日韩精品电影| 91在线你懂得| 成人深夜视频在线观看| 国产高清一区日本| 久久精品久久综合| 亚洲福利一区二区| 一区二区三区中文字幕电影| 综合久久久久久| 亚洲欧美在线观看| 国产精品美女久久久久久久久| 国产午夜精品久久| 中文字幕成人av| 亚洲欧美激情小说另类| 亚洲精品一卡二卡| 中文字幕视频一区二区三区久| 中文字幕第一区| 中文字幕免费不卡| 中文字幕一区二区三区四区不卡| 国产亚洲成aⅴ人片在线观看| 国产网红主播福利一区二区| 中文字幕免费一区| 樱桃视频在线观看一区| 中文字幕亚洲区| 国产视频在线观看一区二区三区| 2020日本不卡一区二区视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲一区二区偷拍精品| 成人免费一区二区三区视频| 亚洲丝袜精品丝袜在线| 亚洲视频资源在线| 国产精品久久毛片| 亚洲欧美成人一区二区三区| 亚洲国产精品久久久久秋霞影院| 日韩美女啊v在线免费观看| 亚洲成人精品一区| 久久国产人妖系列| 极品少妇xxxx精品少妇偷拍| 高清成人免费视频|