一般来说,依赖注入技术有一件事,那就是,当您与其他对象组合一个class时,它可能看起来很复杂。实际...
laravel框架中为什么可以使用static::的写法,难道有个叫static的类,然后访问一个静态方法make吗?但是static是关键字,不可能作为类名吧具体位置在vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.phpclass Auth extends Facade { /** * Get the registered name of the component. * * @return string ...
$app->make() => 父类Application中的make() => resolve()方法 resolve方法 vendor/laravel/framework/src/Illuminate/Container/Container.php /** * 第一次调用 * $abstract Illuminate\Contracts\Http\Kernel::class * $concrete 匿名函数 * * 第二次调用 * $abstract 'App\Http\Kernel' * $concrete 'Ap...
在laravel源码中index.php中,引入 $app=require_once__DIR__.'/../bootstrap/app.php';$kernel=$app->make(Illuminate\Contracts\Http\Kernel::class); 其中这个make方法是从容器中解析一个实例typereturn;其中Illuminate\Foundation\Application这个类和它的父类Illuminate\Container\Container类中都有make方法, 当...
make()需要访问$this->app即服务容器,而app()函数也返回服务容器,并且接受类或接口名称参数来解析它,所以他们的区别只是$this->app->make()是在服务提供者中为其他绑定注入一个解析,而app()方法可以在任何地方进行解析,甚至在服务提供者中也可以app()->make()当然这很诡异也不规范。
上面代码中app->make才是真正将App\Http\Kernel对象实例化。怎么实例化的呢?前面我们有讲到,绑定就是将interface名跟与之对应的class存入一个字典中,而make就是通过interface名找到对应的class名,并用反射机制创建对应的class实例。 kernel->handle()传入一个request并返回一个response对象。别看这里只有一行代码,实际...
天啊,这也太明显了吧,上来就加载了一个 bootstrap/app.php 这个文件,然后就开始使用 $app->make() 来调用容器的实现方法了。那么我们很清楚地就可以发现,这个 bootstrap/app.php 就是一个服务容器。话不多说,马上进入到 bootstrap/app.php 文件中。
新建一个formrequest类。在命令行执行phpartisanmake:requestCreateArticleRequest生成的文件在app/http/requests目录下。在文件中我们可以看到两个方法:publicfunctionauthorize(){returnfalse;}publicfunctionrules(){re
make 方法从容器中解析指定的值为实际的类,比如$app->make(Illuminate\Contracts\Http\Kernel::class)解析出App\Http\Http.php handle方法对 http 请求进行处理 实际上是handle中的sendRequestThroughRouter处理的http请求 首先,将request绑定到共享实例 然后执行bootstarp方法,运行给定的引导类数组$bootstrappers,这里很...
laravel框架是有一个容器框架,框架应用程序的实例就是一个超大的容器,这个实例在bootstrap/app.php内进行初始化: 这个文件在每一次请求到达laravel框架都会执行,所创建的$app即是laravel框架的应用程序实例,它在整个请求生命周期都是唯一的。laravel提供了很多服务,包括认证,数据库,缓存,消息队列等等,$app作为一个容器...