[ Lumen 5.2 文档 ] 起步 -- 升级指南
Lumen5.2 只专注与提供无状态API,因此,session已经从框架中移除,如果你想要使用session,需要切换到 Laravel 5.2。
从 Lumen 5.2升级到 Laravel 5.2 很简单,只需要将路由和应用中自己编写的类拷贝到 Laravel 中即可,由于 Laravel 和 Lumen 共用很多底层组件,即使是自己编写的类也无需做大的改动。
1、升级依赖
更新 composer.json文件指向 laravel/lumen-framework 5.2.*
2、Application
Lumen 不再实现 Illuminate\Contracts\Foundation\Application契约,任何声明此类型依赖的都需要更新为直接引用 Laravel\Lumen\Application类。
认证
由于Lumen不再支持会话,认证完全基于API token或请求头来实现。关于Lumen中认证的实现及使用请参考完整认证文档。
集合
3、Eloquent集合基类
Eloquent集合实例现在返回一个集合基类( Illuminate\Support\Collection)以便提供如下几种方法: pluck、 keys、 zip、 collapse、 flatten、 flip。
保留Key
slice、 chunk和 reverse方法现在可以保留集合中的key,如果你不想要这些方法保留key,可以使用 Collection实例上的 values方法。
4、数据库
MySQL 日期
从 MySQL 5.7 开始, 0000-00-00 00:00:00不再被认为是一个有效的日期,因为 strict模式是默认开启的,所有时间戳字段在插入记录到数据库的时候必须接收一个有效的默认值,你可以在迁移中使用 useCurrent方法将时间戳字段默认设置为当前时间戳,或者调用 nullable方法以允许null值:
$table->timestamp('foo')->nullable();$table->timestamp('foo')->useCurrent();$table->nullableTimestamps();
MySQLJSON 字段类型
MySQL 5.7 起开始支持 json 字段,所以 json字段类型现在可以创建一个json字段并保存到数据库,如果使用MySQL版本低于5.7,那么需要使用 text字段保存json数据到该字段。
5、Eloquent
日期转化
被添加到$casts的所有被标记为date或datetime的属性在调用模型或集合上的toArray方法时现在都会被转化为字符串,从而和$dates数组中定义的日期转化保持一致。
全局作用域
全局作用域的实现被重写以便使用起来更加简单,全局作用域不再需要 remove方法,所以你编写的代码中如果调用了该方法需要将其移除。
如果你调用了Eloquent查询构建器上的 getQuery方法来访问底层的查询构建器实例,现在需要将其改为 toBase。
如果你调用了 remove方法,需要将其修改为 $eloquentBuilder->withoutGlobalScope($scope)。
Eloquent查询构建器新增了 withoutGlobalScope和 withoutGlobalScopes方法,所有调用 $model->removeGlobalScopes($builder)的地方现在需要修改为更加简单的 $builder->withoutGlobalScopes()。
主键
默认情况下,Eloquent假设你的主键是整型并且会将其自动转化为整型,设置任何不是整型的主键需要设置Eloquent模型上的 $incrementing属性值为 false:
/** * Indicates if the IDs are auto-incrementing. * * @var bool */public $incrementing = true;
6、 异常处理
App\Exceptions\Handler类的 $dontReport属性现在需要包含至少以下几种异常类型:
use Illuminate\Validation\ValidationException;use Illuminate\Auth\Access\AuthorizationException;use Illuminate\Database\Eloquent\ModelNotFoundException;use Symfony\Component\HttpKernel\Exception\HttpException;/** * A list of the exception types that should not be reported. * * @var array */protected $dontReport = [ AuthorizationException::class, HttpException::class, ModelNotFoundException::class, ValidationException::class,];
7、 IronMQ
IronMQ 队列驱动现在被转移到其自己的包中,核心框架不再包含其处理,要使用IronMQ,请参考: http://github.com/LaravelCollective/iron-queue
8、 存储
如果你使用了Laravel的Flysystem,需要注册 filesystem绑定,添家如下代码到 bootstrap/app.php:
$app->singleton('filesystem', function ($app) { return $app->loadComponent( 'filesystems', Illuminate\Filesystem\FilesystemServiceProvider::class, 'filesystem' );});
9、 验证
被Lumen控制器基类使用的 ValidatesRequeststrait现在被合并到 ProvidesConvenienceMethodstrait。
如果你先前在控制器基类之外使用了 ValidatesRequeststrait,可以将其从5.1分支拷贝过来或者直接使用 ProvidesConvenienceMethodstrait。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...
