升级指南 | 序言 | Laravel 5.7 中文文档


本站和网页 https://xueyuanjun.com/post/9526.html#toc_9 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

升级指南 | 序言 | Laravel 5.7 中文文档
Laravel 学院
文档
Laravel 8.x 中文文档
Laravel 7.x 中文文档
Laravel 6.x 中文文档
Laravel 5.8 中文文档
Laravel 5.7 中文文档
Laravel 5.6 中文文档
Laravel 5.5 中文文档
Laravel 5.4 中文文档
Laravel 5.3 中文文档
Laravel 5.2 中文文档
Laravel 5.1 中文文档
Lumen 中文文档
全栈教程
PHP 全栈工程师指南
PHP 入门到实战
Laravel 入门到精通
Vue.js 入门到实战
玩转 PhpStorm 教程
Laravel 博客入门项目
Laravel 微信小程序项目
Laravel 前后端分离项目
Swoole 入门到实战
Eloquent 性能优化实战
Redis 高性能实战系列
Laravel 新版本特性
PHP 新特性与最佳实践
Golang
Go 入门教程
Go Web 编程
Gin 使用教程
微服务开发
内功修炼
数据结构与算法
网络协议
微服务从入门到实践
高性能 MySQL 实战
高性能 Redis 实战
Laravel 消息队列实战
Laravel 从学徒到工匠
PHP 设计模式系列
名企面试指南
资源库
Laravel 资源大全
Laravel 开源项目
Laravel 扩展包
Laravel 资源下载
更多
博客 & 新闻
问答 & 讨论
Leetcode 题解
学院君读书笔记系列
关于 Laravel 学院
Laravel 互助学习群
Golang 互助学习群
更多
Laravel 中文文档
Laravel 全栈教程
Laravel 学习路径
Go 入门教程
程序员内功修炼
博客
问答
搜索
注册
登录
Info
Content
章节导航
Laravel 5.7 中文文档
目录索引
序言
3篇文章
新版特性
升级指南
贡献指南
快速入门
5篇文章
安装配置
目录结构
重量级开发环境:Homestead
轻量级开发环境:Valet
部署应用到生产环境
核心架构
5篇文章
一次 Laravel 请求的生命周期
服务容器
服务提供者
门面(Facades)
契约(Contracts)
基础组件
12篇文章
路由
中间件
CSRF 保护
控制器
HTTP 请求
HTTP 响应
视图
URL 生成
Session
表单验证
错误处理
日志
前端开发
4篇文章
Blade 模板引擎
本地化
快速入门:JavaScript & CSS 脚手架
使用进阶:通过 Laravel Mix 编译前端资源
安全系列
7篇文章
登录认证
API 认证(Passport)
授权
邮箱验证
加密
哈希
重置密码
进阶系列
12篇文章
Artisan 控制台
广播
缓存
事件
集合
文件存储
辅助函数
邮件
通知
扩展包开发
队列
任务调度
数据库操作
6篇文章
快速入门
查询构建器
分页
迁移
数据填充
Redis
Eloquent模型
6篇文章
快速入门
关联关系
集合
访问器和修改器
API 资源类
序列化
测试系列
6篇文章
快速入门
HTTP 测试
浏览器测试(Laravel Dusk)
控制台测试
数据库测试
模拟
官方扩展包
6篇文章
订阅支付解决方案:Laravel Cashier
远程操作解决方案:Envoy Task Runner
队列系统解决方案:Laravel Horizon
全文搜索解决方案:Laravel Scout
第三方登录解决方案:Laravel Socialite
本地开发调试解决方案:Laravel Telescope
图书
Laravel 5.7 中文文档
序言
升级指南
升级指南
由 学院君 创建于4年前, 最后更新于 4年前
版本号 #1
20385 views
3 likes
0 collects
预计升级时间:10-15分钟
注:本文档演示的是从 5.6 升级到 5.7
更新依赖
在 composer.json 中更新 laravel/framework 依赖到 5.7.*。
当然,不要忘了检查应用所使用的第三方扩展包是否支持 Laravel 5.7,如果需要升级的话也要更新。
App
register方法
移除了 Illuminate\Foundation\Application 类 register 方法中未使用的参数 options,如果你重写了这个方法,需要更新方法签名:
/**
* Register a service provider with the application.
* @param \Illuminate\Support\ServiceProvider|string $provider
* @param bool $force
* @return \Illuminate\Support\ServiceProvider
*/
public function register($provider, $force = false);
Artisan
调度任务连接&队列
如果没有将连接/任务显式传递到 job 方法的话,$schedule->job 方法现在将识别任务类上设置的 queue 和 connection 属性。
这会被看作是 bug 修复,不过,出于谨慎考虑,这会被列作一个重要更新,如果你对此存疑,可以到这里提交 pull request。
认证
Authenticate 中间件
Illuminate\Auth\Middleware\Authenticate 中间件的 authenticate 方法会被更新为将 $request 作为第一个参数,如果你在自己的 Authenticate 中间件中重写了这个方法,需要更新中间件方法的签名:
/**
* Determine if the user is logged in to any of the given guards.
* @param \Illuminate\Http\Request $request
* @param array $guards
* @return void
* @throws \Illuminate\Auth\AuthenticationException
*/
protected function authenticate($request, array $guards)
ResetsPasswords Trait
ResetsPasswords trait 中受保护的 sendResetResponse 方法现在接收 Illuminate\Http\Request 作为第一个参数,如果你重写了这个方法,需要更新方法签名:
/**
* Get the response for a successful password reset.
* @param \Illuminate\Http\Request $request
* @param string $response
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
protected function sendResetResponse(Request $request, $response)
SendsPasswordResetEmails Trait
SendsPasswordResetEmails trait 的受保护方法 sendResetLinkResponse 现在接收 Illuminate\Http\Request 作为第一个参数,如果你重写了这个方法,需要更新方法签名:
/**
* Get the response for a successful password reset link.
* @param \Illuminate\Http\Request $request
* @param string $response
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
protected function sendResetLinkResponse(Request $request, $response)
授权
Gate 契约
raw 方法的可见性从 protected 调整为 public,此外,该方法声明还被添加到 Illuminate/Contracts/Auth/Access/Gate 契约:
/**
* Get the raw result from the authorization callback.
* @param string $ability
* @param array|mixed $arguments
* @return mixed
*/
public function raw($ability, $arguments = []);
如果你实现了这个接口,需要在实现中添加这个方法。
Blade
or 操作符
Blade 的 or 操作符被移除,因为可以通过 PHP 内置的 ?? 操作符来替代:
// Laravel 5.6...
{{ $foo or 'default' }}
// Laravel 5.7...
{{ $foo ?? 'default' }}
Carbon
Carbon 的「macros」现在直接由 Carbon 库处理,取代了之前通过 Laravel 扩展包处理的方式,我们希望这不会对你现有的代码造成影响,有任何问题,欢迎向我们反馈。
集合
split 方法
split 方法被更新为永远按照请求数量对集合进行分组,除非原生集合的条目总数少于请求的分组数,通常,这也会被看作是一个 bug 修复,不过谨慎起见,我们将其列作一个重要的更新。
Cookie
Factory 契约方法签名
Illuminate/Contracts/Cookie/Factory 接口的 make 和 forever 方法签名被修改了,如果你实现了这个接口,需要更新实现类中的这些方法。
数据库
softDeleteTz迁移方法
表结构构建器的 softDeletesTz 方法现在接收列名作为第一个参数,而 $precision 被调整为第二个参数:
/**
* Add a "deleted at" timestampTz for the table.
* @param string $column
* @param int $precision
* @return \Illuminate\Support\Fluent
*/
public function softDeletesTz($column = 'deleted_at', $precision = 0)
ConnectionInterface 契约
Illuminate\Contracts\Database\ConnectionInterface 契约的 select 和 selectOne 方法签名被更新为容纳新的 $useReadPdo 参数:
/**
* Run a select statement and return a single result.
* @param string $query
* @param array $bindings
* @param bool $useReadPdo
* @return mixed
*/
public function selectOne($query, $bindings = [], $useReadPdo = true);
/**
* Run a select statement against the database.
* @param string $query
* @param array $bindings
* @param bool $useReadPdo
* @return array
*/
public function select($query, $bindings = [], $useReadPdo = true);
此外,cursor 方法还被添加到这个契约中:
/**
* Run a select statement against the database and returns a generator.
* @param string $query
* @param array $bindings
* @param bool $useReadPdo
* @return \Generator
*/
public function cursor($query, $bindings = [], $useReadPdo = true);
如果你实现了这个接口,需要在实现类中添加这个方法。
SQL Server 驱动优先级
在 Laravel 5.7 之前,PDO_DBLIB 驱动被用作默认的 SQL Server PDO 驱动,该驱动已经被微软视为已弃用,所以在 Laravel 5.7 中,PDO_SQLSRV 将作为新的默认驱动,此外,你还可以使用 PDO_ODBC 驱动:
'sqlsrv' => [
// ...
'odbc' => true,
'odbc_datasource_name' => 'your-odbc-dsn',
],
如果这两个驱动都无效,Laravel 将使用 PDO_DBLIB 驱动。
调试
Dumper 类
移除了 Illuminate\Support\Debug\Dumper 和 Illuminate\Support\Debug\HtmlDumper 类以便于使用 Symfony 的原生变量打印类:
Symfony\Component\VarDumper\VarDumper 和 Symfony\Component\VarDumper\Dumper\HtmlDumper。
Eloquent
latest/oldest 方法
Eloquent 查询构建器的 latest 和 oldest 方法被更新为识别可能会被设置到 Eloquent 模型类上的 "created at" 时间戳字段。
wasChanged 方法
Eloquent 模型的修改会在触发 updated 模型事件之前在 wasChanged 方法中生效,如果你对此有疑问,可以向我们反馈。
PostgreSQL 指定的浮点值
PostgreSQL 现在支持浮点值 Infinity、-Infinity 和 NaN。在 Laravel 5.7 之前,这些值在 Eloquent 将数据类型转化为 float、double 或 real 时都会被转化为 0。
在 Laravel 5.7 中,这些值将会被转化为相应的 PHP 常量 INF、-INF 和 NAN。
邮箱验证
如果你选择使用 Laravel 5.7 提供的邮箱验证服务,需要添加额外的脚手架代码到应用,首先,添加 VerificationController 到应用: App\Http\Controllers\Auth\VerificationController。
你还需要验证视图存根文件,这个视图文件位于 resources/views/auth/verify.blade.php,你可以在 GitHub 仓库中查看视图内容。
最后,当调用 Auth::routes 方法时,需要传递 verify 选项到方法:
Auth::routes(['verify' => true]);
文件系统
Filesystem 契约方法
Illuminate\Contracts\Filesystem\Filesystem 契约新增了 readStream 和 writeStream 方法。如果你实现了这个接口,需要将这些方法添加到实现类中。
邮件
Mailable 动态变量风格
动态传递到邮件视图的变量现在可以自动转化为驼峰风格,这使得邮件动态变量和动态视图变量的行为得以保持一致,动态邮件变量并不是可以文档化的 Laravel 特性,所以对应用的影响微乎其微。
路由
Route::redirect 方法
Route::redirect 方法现在会在重定向时返回 302 状态码,而 permanentRedirect 方法则会返回 301 状态码:
// Return a 302 redirect...
Route::redirect('/foo', '/bar');
// Return a 301 redirect...
Route::redirect('/foo', '/bar', 301);
// Return a 301 redirect...
Route::permanentRedirect('/foo', '/bar');
addRoute 方法
Illuminate\Routing\Router 类的 addRoute 方法可见性从 protected 调整为了 public。
验证
嵌套的验证数据
在之前版本的 Laravel 中,validate 方法并不会为嵌套的验证规则返回正确的数据,不过在 Laravel 5.7 中得以修正:
$data = Validator::make([
'person' => [
'name' => 'Taylor',
'job' => 'Developer'
], ['person.name' => 'required'])->validate();
dump($data);
// Prior Behavior...
['person' => ['name' => 'Taylor', 'job' => 'Developer']]
// New Behavior...
['person' => ['name' => 'Taylor']]
Validator契约
Illuminate/Contracts/Validation/Validator 契约新增了 validate 方法:
/**
* Run the validator's rules against its data.
* @return array
*/
public function validate();
如果你实现了这个接口,需要在实现类中添加该方法。
杂项
我们还鼓励你查看 laravel/laravel 代码仓库的更新日志。尽管其中的很多更新不是必须的,但是你可以将应用中的这些文件与代码仓库保持同步。其中的一些更新已经在这篇升级指南中覆盖到了,但是还有很多其他的小更新比如配置文件或注释的微调,就不会一一指出。你可以通过 GitHub 比较工具 轻松查看变更以便选择那些对你而言更为重要的更新。
Laravel
5.7
文档
升级
点赞
取消点赞
收藏
取消收藏
赞赏
分享到以下平台:
<< 上一篇:
新版特性
>> 下一篇:
贡献指南
7 条评论
#1
rowbone
评论于 4年前
正在删除评论...
修改完 composer.json 的 laravel/framework 依赖到 5.7.* 后应该执行composer install 还是 compoer update
#2
学院君
评论于 4年前
回复 #1
正在删除评论...
当然是 update
#3
郭忠学
评论于 4年前
正在删除评论...
请教如下:
php artisan --version 显示当前版本是5.6.28;
修改composer.json 中"laravel/framework": "5.7.*";
composer update 报错:
Problem 1
The requested package laravel/framework 5.7.* is satisfiable by laravel/framework[5.7.x-dev] but these conflict with your requirements or minimum-stability.
这种现象应该从何处下手分析?
#4
郭忠学
评论于 4年前
回复 #3
正在删除评论...
"laravel/framework": "5.7.x-dev", 也不能完成升级;
Problem 1
tymon/jwt-auth 1.0.0-rc.2 requires illuminate/support 5.1. || 5.2. || 5.3. || 5.4. || 5.5. || 5.6. ->
这莫非意为着这个扩展尚未支持5.7!
#5
学院君
评论于 4年前
回复 #4
正在删除评论...
需要升级 tymon/jwt-auth,如果该扩展包没有兼容 5.7 就只能移除它了
#6
学院君
评论于 4年前
回复 #3
正在删除评论...
不用分析 看这段英文提示就明白了~
#7
郭忠学
评论于 4年前
回复 #5
正在删除评论...
多谢。
登录后即可添加评论
升级为学院君订阅用户(新年优惠🎁)
内容导航
更新依赖
App
Artisan
认证
授权
Blade
Carbon
集合
Cookie
数据库
调试
Eloquent
邮箱验证
文件系统
邮件
路由
验证
杂项
相关推荐
新版特性
Laravel 5.7 中文文档
序言
目录结构
Laravel 5.7 中文文档
快速入门
集合
Laravel 5.7 中文文档
Eloquent模型
快速入门
Laravel 5.7 中文文档
测试系列
目录索引
Laravel 5.7 中文文档
回到顶部
2022 基于 Laravel 6 构建
关于学院
订阅服务
友情链接
站点地图
本站 CDN 加速服务由又拍云赞助