laravel5.5源码笔记(一、入口应用的初始化)

澳门新葡亰赌995577 1

昨天按照手册教程,动手写一个Auth扩展,按照包独立性的原则,我不希望将Auth::extend()这种方法写在
start.php
中,毫无疑问,我选择了在服务提供器register()方法中注册扩展驱动。然而,事与愿违……

laravel的项目入口文件index.php如下

澳门新葡亰赌995577 1

澳门新葡亰赌995577 2澳门新葡亰赌995577 3

发现问题

 1 define('LARAVEL_START', microtime(true)); 2  3 require __DIR__.'/../vendor/autoload.php'; 4  5 $app = require_once __DIR__.'/../bootstrap/app.php'; 6  7 $kernel = $app->make(IlluminateContractsHttpKernel::class); 8  9 $response = $kernel->handle(10     $request = IlluminateHttpRequest::capture()11 );12 13 $response->send();14 15 $kernel->terminate($request, $response);

当我在 LoauthServiceProvider 中这样写的时候:

View Code

public function register()
{
    //
    Auth::extend('loauth',function($app){});
}

第一句记录了项目开始运行时间。

报错

第二句引入了基于composer的自动加载模块。

Call to undefined method IlluminateSupportFacadesAuth::extend()

第三句引入了laravel应用主体。

澳门新葡亰赌995577,寻找原因

第四句创建了一个用于处理请求的核心。

当时就纳闷了,找原因,怀疑是Auth没注册?检查发现注册了,因为在路由中可以使用;php
artisan clear-compiled
没用;百思不得其解,甚至怀疑是我不小心修改了核心类,还重新下载了一次laravel包,问题依旧。

第五句对实例化后的request对象进行解析并返回执行后的response响应对象。

折腾了一晚上,最终我把目光锁定在 AuthServiceProvider 的 $defer 属性。

第六句将响应内容进行输出。

根据手册以及注释,我们得知 $defer
属性是用来延迟加载该服务提供器,说直白点就是延迟执行 register()
方法,只需要配合provides()方法即可实现。举个例子:

第七句结束应用并释放资源。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图