Laravel 5.8
Laravel 5.8
在Laravel 5.7
的基础上继续进行优化,
包括引入新的 Eloquent 关联关系(has-one-through
)、优化邮箱验证、基于约定的授权策略类自动注册、DynamoDB
缓存及Session
驱动、优化任务调度器的时区配置、支持分配多个认证guard
到广播频道、PSR-16
缓存驱动规范、优化artisan serve
命令、支持PHPUnit 8.0
、支持Carbon 2.0
、支持Pheanstalk 4.0
,以及多个 bug 修复和可用性的提升。
Laravel 必知
Laravel的请求周期 ?
- Laravel应用的所有请求入口
public/index.php
1 |
|
- HTTP / Console 内核
app/Http/Kernel.php
1 |
|
- 服务提供者
config/app.php
内核启动操作中最重要的便是你应用的
服务提供者
了。
所有应用下的服务提供者均配置到了config/app.php
配置文件中的providers
数组中
1 | 'providers' => [ |
第一步,所有服务提供者的
register
方法会被调用,然后一旦所有服务提供者均注册后,boot
方法才被调用。
- 请求调度
routes/***.php
一旦启动且所有服务提供者被注册,
Request
会被递送给路由。路由将会调度请求,交给绑定的路由或控制器,也当然包括路由绑定的中间件。
1 | Route::middleware('auth:api')->get('/user', function (Request $request) { |
- 聚焦服务提供者
服务提供者是
Laravel
真正意义的生命周期中的关键。应用实例一旦创建,服务提供者就被注册,然后请求被启动的应用接管。
默认的服务提供会存放在app/Providers
下面。
什么是服务容器 ?
Laravel 服务容器是一个用于来管理类的依赖和执行依赖注入的强大工具
服务绑定
- 简单绑定:
$this->app->bind();
- 绑定一个单例:
$this->app->singleton();
- 绑定实例:
$this->app->instance();
- 绑定基本值:
$this->app->when()->needs()->give();
- 绑定接口到实现:
$this->app->bind('App\Contracts\EventPusher');
- 扩展绑定:
$this->app->extend();
- 简单绑定:
解析实例
make
方法:$this->app->make();
makeWith
:$this->app->makeWith()
;
自动注入
1 | public function __construct(UserRepository $users) |
- 容器事件
服务容器每次解析对象会触发一个事件,你可以使用
resolving
方法监听这个事件 :
1 | $this->app->resolving(function ($object, $app) { |
什么是依赖注入 ?
依赖注入这个花哨的名词实质上是指: 类的依赖通过构造函数,或者某些情况下通过”setter”方法
1 | proteced $user; |
什么是服务提供者 ?
服务提供者是所有
Laravel
应用程序的引导中心。你的应用程序,以及 通过服务器引导的Laravel
核心服务都是通过服务提供器引导。但是,「引导」是什么意思呢? 通常,我们的可以理解为注册,比如注册服务容器绑定,事件监听器,中间件,甚至是路由。服务提供者是配置应用程序的中心.
- 编写服务提供者
1 | php artisan make:provider TestServiceProvider |
- 注册服务提供者
1 | // config/app.php |
什么是 Facades
?
Facades
为应用的 服务容器 提供了一个「静态」 接口。Laravel Facades
实际是服务容器中底层类的 「静态代理」 ,相对于传统静态方法,在使用时能够提供更加灵活、更加易于测试、更加优雅的语法。
- Facades 相较于依赖注入
依赖注入的主要好处之一是能交换注入类的实现。在测试的时候非常有用,因为你可以注入一个 ``` 或者
stub
,并断言stub
上的各种方法。
- Facades 相较于辅助函数
Facade
和辅助函数之间没有实际的区别。当你使用辅助函数时,你可以像测试相应的Facade
那样进行测试。
- Facades 工作原理
在
Laravel
应用中,Facade
就是一个可以从容器访问对象的类。其中核心的部件就是Facade
类。Facade
基类使用了__callStatic()
魔术方法,直到对象从容器中被解析出来后,才会进行调用。
__callStatic()
1 |
什么是 Contracts
?
Contracts
契约Laravel
的契约是一组由框架提供,定义了核心服务的interface
集合。
什么是控制反转 ?
IoC (控制反转),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
- 实现控制反转的方式
- 依赖注入(Dependency Injection(DI))
- 依赖查找 (Dependency Lookup)
什么是 Eloquent ORM
?
Laravel
的Eloquent ORM
提供了一个漂亮、简洁的ActiveRecord
实现来和数据库交互。每个数据库表都有一个对应的「模型」用来与该表交互。