百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

laravel11发行说明(laravel框架菜鸟教程)

toyiye 2024-08-24 00:31 2 浏览 0 评论



大家好呀,我是yangyang.今天带来一起 php laravel11的发行说明介绍

发行说明

更新内容

Laravel 11 延续了 Laravel 10.x 中的改进,要求 PHP 版本最低为 8.2,引入了简化的应用程序结构、每秒速率限制、健康路由、优雅的加密密钥轮换、队列测试改进、重新发送邮件传输、提示验证器集成、新的 Artisan 命令等。此外,还引入了第一方可扩展 WebSocket 、服务器 Laravel Reverb,为您的应用程序提供强大的实时功能。

简化的应用程序结构

Laravel 11 为新的Laravel 应用程序引入了简化的应用程序结构,无需对现有应用程序进行任何更改。新的应用程序结构旨在提供更精简、更现代的体验,同时保留 Laravel 开发人员已经熟悉的许多概念。下面我们将讨论 Laravel 新应用程序结构的亮点。

应用程序引导文件

该bootstrap/app.php文件已重新焕发活力,成为代码优先的应用程序配置文件。现在,您可以从此文件中自定义应用程序的路由、中间件、服务提供程序、异常处理等。该文件统一了以前分散在应用程序文件结构中的各种高级应用程序行为设置:

return Application::configure(basePath: dirname(__DIR__))
->withRouting(

 web: __DIR__.'/../routes/web.php',

 commands: __DIR__.'/../routes/console.php',

 health: '/up',

 )

->withMiddleware(function (Middleware $middleware) {

//

 })

->withExceptions(function (Exceptions $exceptions) {

//

 })->create();


服务供应商(ServiceProvider)

Laravel 11 只包含一个AppServiceProvider.以前的服务提供者的功能已合并到 中bootstrap/app.php,由框架自动处理,或者可能放置在您应用程序的AppServiceProvider.

例如,现在默认启用事件发现,很大程度上消除了手动注册事件及其侦听器的需要。但是,如果您确实需要手动注册事件,则只需在AppServiceProvider.同样,您之前在 中注册的路由模型绑定或授权门AuthServiceProvider也可能在 中注册AppServiceProvider。

选择 使用 API 和 广播路由

api.php默认情况下, 和路由channels.php文件不再存在,因为许多应用程序不需要这些文件。相反,它们可以使用简单的 Artisan 命令创建:

php artisan install:api
php artisan install:broadcasting


中间件(Middleware)

此前,新的 Laravel 应用程序包含九个中间件。这些中间件执行各种任务,例如验证请求、修剪输入字符串和验证 CSRF 令牌。

在 Laravel 11 中,这些中间件已移至框架本身中,因此它们不会增加应用程序结构的体积。用于自定义这些中间件行为的新方法已添加到框架中,并且可以从应用程序的bootstrap/app.php文件中调用:

->withMiddleware(function (Middleware $middleware) {
  $middleware->validateCsrfTokens(

 except: ['stripe/*']

 );

$middleware->web(append: [

EnsureUserIsSubscribed::class,

 ])

})


由于所有中间件都可以通过应用程序轻松定制bootstrap/app.php,因此不再需要单独的 HTTP“内核”类。

调度

使用新的Schedule外观,现在可以直接在应用程序的文件中定义计划任务routes/console.php,从而无需单独的控制台“内核”类:

use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send')->daily();


异常处理

与路由和中间件一样,现在可以从应用程序的bootstrap/app.php文件而不是单独的异常处理程序类来自定义异常处理,从而减少新 Laravel 应用程序中包含的文件总数:

->withExceptions(function (Exceptions $exceptions) {
  $exceptions->dontReport(MissedFlightException::class);

$exceptions->report(function (InvalidOrderException $e) {

// ...

 });

})


基Controller类

新 Laravel 应用程序中包含的基本控制器已得到简化。它不再扩展 Laravel 的内部Controller类,并且AuthorizesRequests和ValidatesRequests特征已被删除,因为如果需要,它们可以包含在应用程序的单独控制器中:

<?php
namespace App\Http\Controllers;

abstract class Controller

{

//

}


应用程序默认值

默认情况下,新的 Laravel 应用程序使用 SQLite 进行数据库存储,以及databaseLaravel 会话、缓存和队列的驱动程序。这允许您在创建新的 Laravel 应用程序后立即开始构建应用程序,而无需安装额外的软件或创建额外的数据库迁移。

此外,随着时间的推移,database这些 Laravel 服务的驱动程序已经变得足够强大,可以在许多应用程序环境中进行生产使用;因此,它们为本地和生产应用程序提供了明智、统一的选择。

Laravel Reverb

Laravel Reverb直接为您的 Laravel 应用程序带来超快且可扩展的实时 WebSocket 通信,并提供与 Laravel 现有事件广播工具套件(例如 Laravel Echo)的无缝集成。

php artisan reverb:start

此外,Reverb 通过 Redis 的发布/订阅功能支持水平扩展,允许您在多个后端 Reverb 服务器之间分配 WebSocket 流量,所有服务器都支持单个高需求应用程序。

有关 Laravel Reverb 的更多信息,请参阅完整的Reverb 文档。

每秒速率限制

Laravel 现在支持所有速率限制器的“每秒”速率限制,包括 HTTP 请求和排队作业的速率限制。以前,Laravel 的速率限制器仅限于“每分钟”粒度:

RateLimiter::for('invoices', function (Request $request) {
  return Limit::perSecond(1);

});

健康路由

新的 Laravel 11 应用程序包含一个health路由指令,它指示 Laravel 定义一个简单的运行状况检查端点,该端点可以由第三方应用程序运行状况监控服务或 Kubernetes 等编排系统调用。默认情况下,该路由的服务地址为/up:

->withRouting(
  web: __DIR__.'/../routes/web.php',

 commands: __DIR__.'/../routes/console.php',

 health: '/up',

)


当向此路由发出 HTTP 请求时,Laravel 还将调度一个DiagnosingHealth事件,允许您执行与应用程序相关的其他运行状况检查。

优雅的加密密钥轮换

由于 Laravel 会加密所有 cookie,包括应用程序的会话 cookie,因此基本上对 Laravel 应用程序的每个请求都依赖于加密。但是,正因为如此,轮换应用程序的加密密钥将使所有用户退出您的应用程序。此外,解密由先前加密密钥加密的数据变得不可能。

Laravel 11 允许您通过环境变量将应用程序以前的加密密钥定义为逗号分隔的列表APP_PREVIOUS_KEYS。

加密值时,Laravel 将始终使用环境变量中的“当前”加密密钥APP_KEY。解密值时,Laravel 将首先尝试当前密钥。如果使用当前密钥解密失败,Laravel 将尝试所有先前的密钥,直到其中一个密钥能够解密该值。

即使您的加密密钥发生轮换,这种优雅解密的方法也允许用户不间断地继续使用您的应用程序。

自动密码重新哈希

Laravel 的默认密码哈希算法是 bcrypt。 bcrypt 哈希的“工作因子”可以通过config/hashing.php配置文件或BCRYPT_ROUNDS环境变量进行调整。

通常,随着 CPU/GPU 处理能力的增加,bcrypt 工作因子应该随着时间的推移而增加。如果您增加应用程序的 bcrypt 工作系数,Laravel 现在将在用户通过您的应用程序进行身份验证时优雅地自动重新哈希用户密码。

及时验证

Laravel Prompts是一个 PHP 包,用于向命令行应用程序添加美观且用户友好的表单,具有类似浏览器的功能,包括占位符文本和验证。

Laravel Prompts 支持通过闭包进行输入验证:

$name = text(
  label: 'What is your name?',

 validate: fn (string $value) => match (true) {

strlen($value) < 3 => 'The name must be at least 3 characters.',

strlen($value) > 255 => 'The name must not exceed 255 characters.',

default => null

}

);


然而,在处理许多输入或复杂的验证场景时,这可能会变得很麻烦。因此,在 Laravel 11 中,您可以在验证提示输入时充分利用 Laravel验证器的全部功能:

$name = text('What is your name?', validate: [
             'name' => 'required|min:3|max:255',

]);

队列交互测试

以前,尝试测试排队作业是否被释放、删除或手动失败非常麻烦,并且需要定义自定义队列伪造品和存根。但是,在 Laravel 11 中,您可以使用以下方法轻松测试这些队列交互withFakeQueueInteractions:

use App\Jobs\ProcessPodcast;
$job = (new ProcessPodcast)->withFakeQueueInteractions();

$job->handle();

$job->assertReleased(delay: 30);


新Artisan命令

添加了新的 Artisan 命令以允许快速创建类、枚举、接口和特征:

php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait

模型转换改进

Laravel 11 支持使用方法而不是属性来定义模型的强制转换。这允许简化、流畅的强制转换定义,特别是在使用带有参数的强制转换时:

/**
* Get the attributes that should be cast.

 * 有关属性转换的更多信息,请查看Eloquent 文档。

 * @return array<string, string>

*/

protected function casts(): array

{

return [

'options' => AsCollection::using(OptionCollection::class),

// AsEncryptedCollection::using(OptionCollection::class),

// AsEnumArrayObject::using(OptionEnum::class),

// AsEnumCollection::using(OptionEnum::class),

 ];

}



功能once

辅助once函数执行给定的回调,并在请求期间将结果缓存在内存中。任何once具有相同回调的函数的后续调用都将返回之前缓存的结果:

function random(): int
{

return once(function () {

return random_int(1, 1000);

});

}

random(); // 123

random(); // 123 (cached result)

random(); // 123 (cached result)

使用内存数据库进行测试时提高了性能

:memory:在测试期间使用 SQLite 数据库时,Laravel 11 提供了显着的速度提升。为了实现这一目标,Laravel 现在维护对 PHP PDO 对象的引用并跨连接重用它,通常会将总测试运行时间减少一半。

改进了对 MariaDB 的支持

Laravel 11 改进了对 MariaDB 的支持。在以前的 Laravel 版本中,您可以通过 Laravel 的 MySQL 驱动程序使用 MariaDB。然而,Laravel 11 现在包含一个专用的 MariaDB 驱动程序,它为该数据库系统提供了更好的默认值。有关 Laravel 数据库驱动程序的更多信息,请查看数据库文档。

检查数据库并改进架构操作

Laravel 11 提供了额外的数据库模式操作和检查方法,包括本机修改、重命名和删除列。此外,还提供了高级空间类型、非默认模式名称以及用于操作表、视图、列、索引和外键的本机模式方法:

use Illuminate\Support\Facades\Schema;
$tables = Schema::getTables();

$views = Schema::getViews();

$columns = Schema::getColumns('users');

$indexes = Schema::getIndexes('users');

$foreignKeys = Schema::getForeignKeys('users');

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码