以Route
门脸类为例,我们定义路由时使用的就是Route门脸类,例如我们在web.php中定义的路由
use IlluminateSupportFacadesRoute;
Route::get('/', 'DashboardController@index');
Route::get('/login', 'LoginController@index')->name('login');
我们可以使用PHPStorm自带的跳转功能,跳转到Route门脸类的定义处,如下图所示(Mac上的快捷键是:Command+鼠标左键单击)
当我们跳转到Route门脸类定义的地方时却发现,这里有的只是一些方法的注释,却没有我们实际调用Route::get()
方法的源码,
实际上,真正的源码在getFacadeAccessor()
方法返回的router
标识所对应的服务里. 所有我们得查看router对应的服务,
服务在哪里查看?
laravel注册服务的地方有两个,一个在config/app.php的providers里,一个在框架的核心里
下图是框架的核心laravel/framework/src/Illuminate/Foundation/Application.php
中的registerCoreContainerAliases
router对应的服务
可以看到,router对应的是一个有三个服务的数组,那么router实际上用的是哪一个呢?这里需要用到tinker
了,进入到项目目录,执行命令php artisan tinker
,通过app('服务标识')查看实际对应的服务
由图片可以看出,router实际对应是Illuminate/Routing/Router.php
,我们查看该文件,如图所示,就能看到Route门脸类的方法的源码了,你熟悉的get, post源码找到啦