Laravel 10阅读理解

前言

不知不觉一年又过去了,遥想去年用Laravel 9 写的一个项目目前还没有火起来,laravel 10又出来了,新的技术总是让人猝不及防,来不及感慨技术的日新月异,让我们来看看Laravel10带给了我们哪些改变,我会把重要的改变摘录到本文中,供大家阅读

阅读摘录

PHP版本支持

  • Laravel 10.x 放弃了对 PHP 8.0 的支持,要求至少使用 PHP 版本 8.1
  • php的最新版本为php82,如果你在Laravel 10中使用PHP 8.2,这就更棒了!

弃用动态属性

  • PHP8.2 中最值得注意的弃用之一就是弃用动态属性。如果一个类属性没有声明就被调用或赋值,就会退出程序。这个可能会影响到很多的的 PHP 遗留程序,推荐的修复方法是在类型中声明属性。在laravel 9 中就已经支持了PHP82的规则,所以你不光可以在laravel 10 中放心大胆的使用php82,在laravel 9 中你也可以使用!
class User 
{    
    public int $uid;
    public string $name;//不声明属性将会报错
}
$user = new User();
$user->name = 'Foo';

Predis版本支持

  • Predis是一个强大的Redis客户端,Laravel以前支持1和2两个版本, 但从Laravel 10开始, 该框架不再支持Predis 1.

本地类型声明

官方文档 :Laravel 10.x 彻底更新了框架使用的应用程序骨架和所有存根,以引入所有方法签名的参数和返回类型提示。此外,删除了多余的“doc block”类型提示信息:
这段话初读的时候让人有点摸不着头脑,其实我们通过对比两组不同版本的骨架代码就可以清晰的看到变动,我们选择一个文件来对比 \app\Http\Middleware\RedirectIfAuthenticated.phpp

  • 可以直观的看出它是删除了部分doc block注释,而在代码中声明方法签名(方法名+参数列表)的类型和返回值的类型
  • 不管是doc block类型提示还是类型声明,都是为了提供更好的类型清晰度,方便开发者的快速理解
  • laravel 9 版本
class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @param  string|null  ...$guards
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        return $next($request);
    }
}
  • laravel 10版本
class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next, string ...$guards): Response
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        return $next($request);
    }
}

PhpStudy安装 php82

在安装laravel 10的时候遇到了一些小问题,
我直接使用 composer create-project laravel/laravel进行了安装,完成后发现安装的是laravel 9,laravel 10的安装需要提供>=8.1的PHP版本,我本地之前用的一直是PHPStudy,目前内置的最高版本是php80,所以我们先要想办法安装php81,我准备直接安装php82来进行laravel 10的测试,以下为安装步骤

  • 官网下载最新的php版本 windows.php.net/download/
  • 这里我们下载的是64位nts版的PHP8.2.0,下载速度有点小慢,目前官网提供的最新版本是8.2.4
  • 解压压缩包,并改文件夹名为php8.2.0nts,移动到phpstudy_pro\Extensions\php目录下
  • 将php8.2.0nts目录下的php.ini-development文件复职一份并改文件名为 php.ini
  • ;extension_dir = “ext”改为
    extension_dir=”D:\phpstudy_pro\Extensions\php\php8.2.0nts\ext”
  • 将D:\phpstudy_pro\Extensions\php\php8.2.0nts配置为环境变量
  • 对php.ini进行一些配置
extension=bz2
extension=curl
extension=fileinfo
extension=gd
extension=gettext
extension=mbstring
extension=mysqli
extension=openssl
extension=pdo_mysql

至此,依然遇到了巨大的问题,composer依然安装不了laravel 10

Laravel 10阅读理解

不可知的原因,在本地始终无法完成安装,最后在Linux服务器上完成了安装!

进程交互

use Illuminate\Support\Facades\Process;

$result  =  Process::run('ls -la');

return  $result->output();
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

绷不住了

1年前 评论
playmaker 1年前

有性能提升吗?

1年前 评论
mowangjuanzi 1年前
随波逐流

然并卵,我们的项目还在继续撸 8.x :unamused:

1年前 评论
fatrbaby

本质上来说,Laravel10 并没有新技术,只是功能和体验上的更改。

1年前 评论

前几天把一个 laravel9 的项目升级到 10 ,感觉还是挺简单的。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!