laravel 裏的路由是由RouteServiceProvider提供的,其中的boot方法爲啓動項,調用了父類的boot方法。
RouteServiceProvider中的boot方法設置了本身與UrlGenerator類的根命名空間。
經過bootstrap/cache/routes.php處的緩存文件判斷路由是否已緩存,分別從緩存與路由類讀取。
給app容器加載booted鉤子函數,函數內執行了RouteCollection類的refreshNameLookups與refreshActionLookups方法,遍歷路由文件,並分別更新name與action列表,action列表存儲調用controller的路由,以下圖 action ['controller']屬性。
"HEADtest/{id?}/{ip?}" => Route {#119 ▼
+uri: "test/{id?}/{ip?}"
+methods: array:2 [▶]
+action: array:6 [▼
"middleware" => array:1 [▶]
"uses" => "App\Http\Controllers\testController@exportExcel"
"controller" => "App\Http\Controllers\testController@exportExcel"
"namespace" => "App\Http\Controllers"
"prefix" => null
"where" => []
]
+isFallback: false
+controller: null
+defaults: []
+wheres: []
+parameters: null
+parameterNames: null
+computedMiddleware: null
+compiled: null
#router: Router {#25}
#container: Application {#2}
}
路由文件裏的route::any等門面類調用的方法,在router類裏調用addRoute方法,將建立好的route對象傳入RouteCollection類裏,存儲在路由字典裏,方便調用
Router建立Route,添加到RouteCollection。