将 Laravel 5.0 升级到最新版本 (7.x)

Fai*_*l M 2 php upgrade laravel

我被分配了一个旧的 Laravel 项目(5.0 版)。第一个任务是将 Laravel 从5.0 版升级到最新的7.x 版(截至今天)。

从 Laravel 文档中,我发现这将需要一个痛苦的漫长过程!我知道有一个名为Laravel Shift的付费服务,这将涉及相当大的资金,因为这是巨大的版本跳跃。所以,Laravel Shift 不是我的选择。

我可以安装最新版本的 Laravel,然后复制并粘贴旧版本的所有 MVC 文件吗?有没有人做过这个方法并立即成功?

谢谢。

Dig*_*jay 6

首先,让我们将 php 升级到至少 7.2.5 以下命令适用于 7.4

sudo apt-get update
sudo apt -y install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt -y install php7.4
sudo apt-get install -y php7.4-{bcmath,bz2,intl,gd,mbstring,mysql,zip,xml,curl,json}
php -v
sudo update-alternatives --set php /usr/bin/php7.4
sudo a2enmod php7.4
sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

如需验证,请检查 {url}/phpinfo.php

其次,删除composer.lock文件和供应商文件夹rm -R vendor。运行composer install

第三,这就是一切走向地狱的地方!! 升级后代码更改

1) has 方法
即使输入值为空字符串或空值,$request->has 方法现在也将返回true。添加了一个新的 $request->filled 方法,它提供了 has 方法以前的行为。
例如

array:1 [
  "class_teachers" => null
]

$request->has('class_teachers')
true

$request->filled('class_teachers')
false
Run Code Online (Sandbox Code Playgroud)


2)从 html 页面标题中删除 html 特殊字符。


3) 嵌套三元运算
必须明确使用括号来规定运算的顺序。

1 ? 2 : 3 ? 4 : 5;       // deprecated
(1 ? 2 : 3) ? 4 : 5;     // ok
1 ? 2 : (3 ? 4 : 5);     // ok
Run Code Online (Sandbox Code Playgroud)


4) The or 操作符
Blade“or”操作符已被移除,取而代之的是 PHP 的内置 ?? “空合并”运算符

$user->name or "-"  -->   $user->name ?? "-"
Run Code Online (Sandbox Code Playgroud)


5)输入外观

'Input' => Illuminate\Support\Facades\Input::class,  -->  'Input' => Illuminate\Support\Facades\Request::class,
Run Code Online (Sandbox Code Playgroud)


6) 不推荐使用花括号的数组和字符串偏移访问语法

$str = "test";
echo $str{0};  // deprecated
echo $str[0];  // ok
Run Code Online (Sandbox Code Playgroud)


7) withCount 列格式化
当使用别名时,withCount 方法将不再自动将 _count 附加到结果列名上。


8) 日志
所有日志配置现在都存放在它自己的 config/logging.php 配置文件中。您应该在自己的应用程序中放置一份默认配置文件的副本,并根据应用程序的需要调整设置。

log 和 log_level 配置选项可能会从 config/app.php 配置文件中删除。

use Illuminate\Support\Facades\Log;
Log::info('Showing user profile for user: '.$id);
Run Code Online (Sandbox Code Playgroud)


9)队列
QUEUE_DRIVER环境变量已被重命名为QUEUE_CONNECTION。这应该不会影响您正在升级的现有应用程序,除非您有意修改 config/queue.php 配置文件。并将默认 QUEUE_CONNECTION 更改为数据库

还要更改 .env 文件(非常重要)


10) 以秒为单位的 TTL

// Laravel 5.7 - Store item for 30 minutes...
Cache::put('foo', 'bar', 30);

// Laravel 5.8 - Store item for 30 seconds...
Cache::put('foo', 'bar', 30);
Run Code Online (Sandbox Code Playgroud)


11) Carbon 2.0 Laravel 现在同时支持 Carbon 1 和 Carbon 2;因此,如果没有检测到与任何其他软件包的其他兼容性问题,Composer 将尝试升级到 Carbon 2.0。请查看Carbon 2.0迁移指南


12) whereDate 方法
查询构建器的 whereDate 方法现在将 DateTime 实例转换为 Ymd 格式:

// previous behaviour - SELECT * FROM `table` WHERE `created_at` > '2018-08-01 13:00:00'
$query->whereDate('created_at', '>', Carbon::parse('2018-08-01 13:00:00'));

// current behaviour - SELECT * FROM `table` WHERE `created_at` > '2018-08-01'
$query->whereDate('created_at', '>', Carbon::parse('2018-08-01 13:00:00'));
Run Code Online (Sandbox Code Playgroud)

.
.
.
也可以有更多。这是我升级项目时必须做的事情。请阅读迁移指南

至少,我希望,我能够给你一个良好的开端。祝你好运!