//比如
Route::get('/', 'HomeController@index');
并非是直接使用
AppProvidersRouteServiceProvider.php 中有定义好加载Route类
use IlluminateSupportFacadesRoute;
这个文件和其它文件比起来没有namespace关键字,自然使用类不需要use之类的操作,配合Laravel的门面模式(Facades)可以通过静态方式访问实例。所有的Facades类你可以在config/app.php下看到,里面有个"aliases"的键,它的值就是所有的Facades。
appProvidersRouteServiceProvider.php 中 map
方法
可以看出, 他是在其他的地方进行了 require
web.php
或者 api.php
并不是一个能单独运行的php文件, 它之所以能直接使用 Route
也是因为他是被 require
的文件
4 回答13.2k 阅读✓ 已解决
5 回答7.7k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
1 回答955 阅读✓ 已解决
1 回答1.4k 阅读
1 回答1.4k 阅读
2 回答993 阅读
原理很简单
1 . 首先, 你注意一下
/config/app.php
里面2 . 因为有
Facades
, 所以我们直接去看Illuminate\Support\Facades\Route::class
这个类返回的内容3 . 那就简单了, 直接去找注册为
router
的组件发现是在
Illuminate/Routing/RoutingServiceProvider.php
4 .
new Router()
看到了没, 很显然就会返回Illuminate/Routing/Router.php
实例; 是不是发现了(づ ̄3 ̄)づ╭❤~ 请宣我 !! 么么
问答时间
我们可以确认了 'router' 是在
Illuminate/Routing/RoutingServiceProvider.php
里面的但是为什么没有配置在
/config/app.php
的providers
里面呢答案在这里
Illuminate/Foundation/Application.php
注意
base service providers
和configured providers
这个答案排版放不下了, 放到了文章里面
问答的其它问题