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

主頁 > 知識庫 > Laravel源碼解析之路由的使用和示例詳解

Laravel源碼解析之路由的使用和示例詳解

熱門標(biāo)簽:太原400電話申請流程 代理打電話機(jī)器人 企業(yè)400電話辦理多少費用 萍鄉(xiāng)商鋪地圖標(biāo)注 神龍斗士電話機(jī)器人 電信外呼系統(tǒng)多少錢一個月 宿州正規(guī)外呼系統(tǒng)軟件 桂陽公司如何做地圖標(biāo)注 合肥企業(yè)外呼系統(tǒng)線路

前言

我的解析文章并非深層次多領(lǐng)域的解析攻略。但是參考著開發(fā)文檔看此類文章會讓你在日常開發(fā)中更上一層樓。

廢話不多說,我們開始本章的講解。

入口

Laravel啟動后,會先加載服務(wù)提供者、中間件等組件,在查找路由之前因為我們使用的是門面,所以先要查到Route的實體類。

注冊

第一步當(dāng)然還是通過服務(wù)提供者,因為這是laravel啟動的關(guān)鍵,在 RouteServiceProvider 內(nèi)加載路由文件。

protected function mapApiRoutes()
{
  Route::prefix('api')
     ->middleware('api')
     ->namespace($this->namespace) // 設(shè)置所處命名空間
     ->group(base_path('routes/api.php')); //所得路由文件絕對路徑
}

首先require是不可缺少的。因路由文件中沒有命名空間。 Illuminate\Routing\Router 下方法

protected function loadRoutes($routes)
{
  if ($routes instanceof Closure) {
    $routes($this);
  } else {
    $router = $this;

    require $routes;
  }
}

隨后通過路由找到指定方法,依舊是 Illuminate\Routing\Router 內(nèi)有你所使用的所有路由相關(guān)方法,例如get、post、put、patch等等,他們都調(diào)用了統(tǒng)一的方法 addRoute

public function addRoute($methods, $uri, $action)
{
  return $this->routes->add($this->createRoute($methods, $uri, $action));
}

之后通過 Illuminate\Routing\RouteCollection addToCollections 方法添加到集合中

protected function addToCollections($route)
{
  $domainAndUri = $route->getDomain().$route->uri();

  foreach ($route->methods() as $method) {
    $this->routes[$method][$domainAndUri] = $route;
  }

  $this->allRoutes[$method.$domainAndUri] = $route;
}

添加后的結(jié)果如下圖所示

實例化

依舊通過反射加載路由指定的控制器,這個時候build的參數(shù)$concrete = App\Api\Controllers\XxxController

public function build($concrete)
{
  // If the concrete type is actually a Closure, we will just execute it and
  // hand back the results of the functions, which allows functions to be
  // used as resolvers for more fine-tuned resolution of these objects.
  if ($concrete instanceof Closure) {
    return $concrete($this, $this->getLastParameterOverride());
  }
  
  $reflector = new ReflectionClass($concrete);
  // If the type is not instantiable, the developer is attempting to resolve
  // an abstract type such as an Interface of Abstract Class and there is
  // no binding registered for the abstractions so we need to bail out.
  if (! $reflector->isInstantiable()) {
    return $this->notInstantiable($concrete);
  }
  
    
  $this->buildStack[] = $concrete;

  $constructor = $reflector->getConstructor();
  // If there are no constructors, that means there are no dependencies then
  // we can just resolve the instances of the objects right away, without
  // resolving any other types or dependencies out of these containers.
  if (is_null($constructor)) {
  
      array_pop($this->buildStack);
  
      return new $concrete;
  }

  $dependencies = $constructor->getParameters();
  // Once we have all the constructor's parameters we can create each of the
  // dependency instances and then use the reflection instances to make a
  // new instance of this class, injecting the created dependencies in.
  $instances = $this->resolveDependencies(
    $dependencies
  );

  array_pop($this->buildStack);
  
  return $reflector->newInstanceArgs($instances);
}

這時將返回控制器的實例,下面將通過url訪問指定方法,一般控制器都會繼承父類 Illuminate\Routing\Controller ,laravel為其設(shè)置了別名 BaseController

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));
}

Laravel通過controller繼承的callAction去調(diào)用子類的指定方法,也就是我們希望調(diào)用的自定義方法。

public function callAction($method, $parameters)
{
  return call_user_func_array([$this, $method], $parameters);
}

致謝

感謝你看到這里,本篇文章源碼解析靠個人理解。如有出入請拍磚。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Laravel框架源碼解析之入口文件原理分析
  • Laravel框架源碼解析之反射的使用詳解
  • 通過源碼解析Laravel的依賴注入
  • Laravel框架學(xué)習(xí)筆記(二)項目實戰(zhàn)之模型(Models)
  • laravel model模型定義實現(xiàn)開啟自動管理時間created_at,updated_at
  • laravel model模型處理之修改查詢或修改字段時的類型格式案例
  • Laravel5.1 框架模型工廠ModelFactory用法實例分析
  • Laravel 5框架學(xué)習(xí)之模型、控制器、視圖基礎(chǔ)流程
  • Laravel模型事件的實現(xiàn)原理詳解
  • Laravel模型間關(guān)系設(shè)置分表的方法示例
  • laravel學(xué)習(xí)教程之關(guān)聯(lián)模型
  • Laravel框架源碼解析之模型Model原理與用法解析

標(biāo)簽:白銀 太原 辛集 衡陽 鄂州 廊坊 綏化 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Laravel源碼解析之路由的使用和示例詳解》,本文關(guān)鍵詞  Laravel,源碼,解析,之,路由,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Laravel源碼解析之路由的使用和示例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Laravel源碼解析之路由的使用和示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    99久久夜色精品国产网站| 欧美色图一区二区三区| 婷婷中文字幕综合| 麻豆成人久久精品二区三区小说| 国产成人av电影在线| 欧美午夜精品理论片a级按摩| 久久久亚洲精品石原莉奈| 国产亚洲一区字幕| 日韩国产高清在线| 99久久99精品久久久久久 | 国产精品免费视频网站| 欧美精品久久天天躁| 国产欧美日韩麻豆91| 玉足女爽爽91| 国产精品亚洲第一区在线暖暖韩国 | 国产精品成人免费精品自在线观看| ww亚洲ww在线观看国产| 亚洲国产综合视频在线观看| 精品一区二区久久| 一本到一区二区三区| 日韩美女一区二区三区| 欧美激情一区在线| 日日夜夜一区二区| 成人激情av网| 奇米精品一区二区三区在线观看 | 日韩亚洲欧美综合| 国产欧美精品日韩区二区麻豆天美| 亚洲精品欧美综合四区| 日韩av电影免费观看高清完整版| 色素色在线综合| 久久亚洲一区二区三区明星换脸 | 91麻豆精品国产自产在线 | 亚洲欧美日韩久久| 成人综合婷婷国产精品久久 | 国产午夜亚洲精品羞羞网站| 免费久久精品视频| 一本一道综合狠狠老| 国产精品三级视频| 韩国一区二区三区| 欧美在线不卡视频| 午夜精品久久久久久久 | 亚洲一区二区三区在线| 不卡区在线中文字幕| 国产精品电影院| 亚洲男人的天堂一区二区| 精品在线你懂的| 亚洲一区二区影院| 成人av在线一区二区| 久久久一区二区三区捆绑**| 国产传媒一区在线| 国产精品视频免费| 懂色av噜噜一区二区三区av| 国产日韩精品久久久| 99久久精品情趣| 亚洲欧美一区二区三区孕妇| 97se狠狠狠综合亚洲狠狠| 亚洲乱码国产乱码精品精可以看 | 99国产精品视频免费观看| 久久久影视传媒| 国产综合色在线| 成人永久aaa| 日韩码欧中文字| 91亚洲午夜精品久久久久久| 亚洲色图欧洲色图婷婷| 欧美性生活久久| 亚洲国产乱码最新视频| 欧美亚洲一区二区在线| 日本麻豆一区二区三区视频| 久久这里只精品最新地址| 国产成人日日夜夜| 国产1区2区3区精品美女| 国产精品久久久久久久久久免费看| 91香蕉国产在线观看软件| 久久久另类综合| 国产一区二区三区| 欧美极品另类videosde| 成人精品免费看| 综合av第一页| 中文字幕国产一区二区| 91视频在线观看免费| 日韩成人av影视| 欧美va亚洲va| 高潮精品一区videoshd| 亚洲最新视频在线观看| 日韩欧美久久久| 懂色av一区二区三区免费看| 一区二区三区欧美久久| 欧美成人一级视频| 91蜜桃传媒精品久久久一区二区| 日韩黄色免费电影| 亚洲色欲色欲www| 国产欧美一区二区精品婷婷| 欧美日韩成人在线一区| 欧美最猛黑人xxxxx猛交| 国产成人aaaa| 久久成人综合网| 天天操天天干天天综合网| 国产日产欧美一区二区三区 | 99久久婷婷国产综合精品电影| 视频在线观看国产精品| 亚洲一区二区四区蜜桃| 亚洲桃色在线一区| 国产精品午夜在线| 精品噜噜噜噜久久久久久久久试看| 欧美日韩一区二区在线观看视频| 色噜噜狠狠色综合欧洲selulu| 中文字幕免费不卡| 91麻豆swag| 亚洲女人的天堂| 一本久久精品一区二区| 免费高清在线一区| 亚洲欧美日本韩国| 欧美色网站导航| 成人激情视频网站| 亚洲成人动漫在线免费观看| 欧美老年两性高潮| 国产不卡免费视频| 亚洲人成网站在线| 欧美一区二区视频在线观看| 色哦色哦哦色天天综合| 欧美日韩在线一区二区| 三级不卡在线观看| 日韩经典中文字幕一区| 成人午夜在线视频| 欧美一级理论性理论a| 国产精品一区二区你懂的| 欧美精品一区二区三区蜜臀| 丝袜美腿亚洲综合| 亚洲欧洲三级电影| 91福利精品视频| 亚洲成人动漫精品| 精品蜜桃在线看| 欧美不卡一区二区| 久久精品亚洲国产奇米99| www.亚洲激情.com| 麻豆久久一区二区| 日本美女视频一区二区| 国产成人无遮挡在线视频| 粉嫩一区二区三区在线看| 高清av一区二区| 99精品视频在线播放观看| 欧美性色黄大片| 国产亚洲污的网站| 美女诱惑一区二区| 欧美日本一区二区三区| 中文字幕精品—区二区四季| 男人的j进女人的j一区| 欧美性生活一区| 一区二区三区在线视频观看| 国产馆精品极品| 精品国产乱码久久久久久蜜臀| 久久久精品国产免大香伊| 一区二区免费看| 欧美女孩性生活视频| 日韩中文字幕不卡| 欧美日韩成人综合| 青青草一区二区三区| 日韩亚洲欧美综合| 麻豆91在线观看| 欧美草草影院在线视频| 国产精品白丝jk黑袜喷水| 国产亚洲精品aa| 色欧美片视频在线观看| 日韩在线一区二区| 精品毛片乱码1区2区3区| 国产综合久久久久影院| 日韩精品自拍偷拍| 成人黄动漫网站免费app| 亚洲午夜激情网站| 久久久久国产精品人| 99re在线视频这里只有精品| 日本一区中文字幕| 中文字幕一区二区视频| 5858s免费视频成人| av亚洲精华国产精华精华| 香蕉成人伊视频在线观看| 国产亚洲污的网站| 精品卡一卡二卡三卡四在线| 色综合视频一区二区三区高清| 青青草国产成人av片免费| 国产精品妹子av| 欧美哺乳videos| 4438x成人网最大色成网站| www.性欧美| 成人va在线观看| 国产一区二区精品久久| 日本人妖一区二区| 亚洲伊人色欲综合网| 亚洲欧洲www| 国产精品传媒入口麻豆| 2023国产精品自拍| 欧美xxxxx牲另类人与| 日韩三级视频在线看| 在线成人高清不卡| 欧美三级乱人伦电影| av中文字幕亚洲| 97久久久精品综合88久久| 波多野结衣在线aⅴ中文字幕不卡| 蜜臀av性久久久久蜜臀aⅴ| 天天做天天摸天天爽国产一区 |