如何查看laravel门脸类包含方法的源码

Route门脸类为例,我们定义路由时使用的就是Route门脸类,例如我们在web.php中定义的路由

use Illuminate\Support\Facades\Route;

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中的registerCoreContainerAliasesrouter对应的服务

可以看到,router对应的是一个有三个服务的数组,那么router实际上用的是哪一个呢?这里需要用到tinker了,进入到项目目录,执行命令php artisan tinker,通过app('服务标识')查看实际对应的服务

由图片可以看出,router实际对应是Illuminate/Routing/Router.php,我们查看该文件,如图所示,就能看到Route门脸类的方法的源码了,你熟悉的get, post源码找到啦

posted @ 2019-05-05 14:48  itbsl  阅读(575)  评论(0编辑  收藏  举报