Laravel 7发行说明( 一)

简介: Laravel 7发行说明( 一)

版本化方案



Laravel及官方发布的包皆遵循 语义版本化。主要框架版本每六个月发布一次 (~2月和~8月),而次要和补丁版本可能每周发布一次。次要版本和补丁 决不 包含非兼容性更改。


引入 Laravel 框架或其组件时,应始终使用版本约束,如 ^7.0,因为 Laravel 的主要版本确实包含非兼容性更改。我们会努力确保您可以在一天或更短的时间内更新到最新版本。


支持政策


对于 LTS 版本,例如 Laravel 6,提供了 2 年的错误修复和3年的安全修复。这些版本提供了最长的支持和维护窗口。对于一般的发行版本,只提供了 6 个月的错误修复和 1 年的安全修复。对于包括 Lumen 在内的所有其他版本,只有最新版本才会修复错误。此外,请查阅 Laravel 支持的 数据库版本。


image.png


Laravel 7



Laravel 7 通过引入 Laravel Sanctum,路由速度改进,自定义 Eloquent 强制转换(casts), Blade 组件标签,流畅的字符串操作,开发人员专用的 HTTP 客户端, 第一方 CORS 支持, 路由模型绑定作用域改进, 存根自定义, 数据库队列改进, 多邮箱驱动, 查询时间强制转换(casts),新的 artisan test 命令,以及各种其他错误修复和可用性改进,对 Laravel 6.x 继续进行了改善。


Laravel Sanctum



Laravel Sanctum 由 Taylor Otwell建造。


Laravel Sanctum 为 SPA (单页应用程序),移动应用程序和基于令牌的简单 API 提供了轻巧的身份验证系统。 Sanctum 允许应用程序的每个用户生成多个 API 令牌。 这些令牌可以被授予能力/作用域,用于指定允许令牌执行哪些动作。


有关 Laravel Sanctum 的更多信息, 请查看 Sanctum 文档。


自定义 Eloquent 类型转换


自定义 Eloquent 类型转换由 Taylor Otwell 开发贡献.


Laravel 内置了多种常用的类型转换。但是,用户偶尔会需要将数据转换成自定义类型。现在,该需求可以通过定义一个实现 CastsAttributes 接口的类来完成


实现了该接口的类必须事先定义一个 get 和 set 方法。 get 方法负责将从数据库中获取的原始数据转换成对应的类型,而 set 方法则是将数据转换成对应的数据库类型以便存入数据库中。举个例子,下面我们将内置的 json 类型转换以自定义类型转换的形式重新实现一遍:



<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class Json implements CastsAttributes
{
    /**
     * 将取出的数据进行转换
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  mixed  $value
     * @param  array  $attributes
     * @return array
     */
    public function get($model, $key, $value, $attributes)
    {
        return json_decode($value, true);
    }
    /**
     * 转换成将要进行存储的值
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  array  $value
     * @param  array  $attributes
     * @return string
     */
    public function set($model, $key, $value, $attributes)
    {
        return json_encode($value);
    }
}


定义好自定义类型转换后,可以使用其类名称将其附加到模型属性:


<?php
namespace App;
use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
    /**
     * 这个属性应该被转化为原生类型
     *
     * @var array
     */
    protected $casts = [
        'options' => Json::class,
    ];
}


要学习如何实现自定义 Eloquent 类型转换,包括转换成特定值对象的类型转换,请参照 Eloquent documentation。


Blade 组件标签和变化



Blade 组件标签贡献人员有 Spatie, Marcel Pociot, Caleb Porzio, Dries Vints, 和 Taylor Otwell.


{小提示} Blade 组件已经大刀阔斧修改,其中变化有允许基于标签的渲染,参数管理,组件类,内联视图组件众多变化。经过修改的 Blade 组件如此之多,请从这里 Blade文档来学习这些新特性。


总结为一句,现在的一个组件能从指定的类获取数据。所有的公开属性和方法都清晰地定义在组件类里,会自动组装成组件视图。任何附加的 HTML 属性都指定于一个可以被管理的自动包含$attribute 变量的组件,它是一个属性包的实例。


下面有个例子,我们会假设一个 App\View\Components\Alert 组件定义是这样的:


<?php
namespace App\View\Components;
use Illuminate\View\Component;
class Alert extends Component
{
    /**
     * 提醒类型
     *
     * @var string
     */
    public $type;
    /**
     * 创建组件实例.
     *
     * @param  string  $type
     * @return void
     */
    public function __construct($type)
    {
        $this->type = $type;
    }
    /**
     *获取给提醒类型的类 
     *
     * @return string
     */
    public function classForType()
    {
        return $this->type == 'danger' ? 'alert-danger' : 'alert-warning';
    }
    /**
     * 获取渲染组件的视图/内容
     *
     * @return \Illuminate\View\View|string
     */
    public function render()
    {
        return view('components.alert');
    }
}


并且假设 Blade 组件模板定义是这样的:


<!-- /resources/views/components/alert.blade.php -->
<div class="alert {{ $classForType() }}" {{ $attributes }}>
    {{ $heading }}
    {{ $slot }}
</div>


组件可以被渲染在另一个使用组件标签的 Blade 视图:


<x-alert type="error" class="mb-4">
    <x-slot name="heading">
        Alert content...
    </x-slot>
    Default slot content...
</x-alert>


如前所述,在大改之后的 Laravel7 当中这是一个非常小又普通的一个功能,而且还没有演示匿名组件,内联视图组件和各种各样的其他特性。请从这里Blade文档来学习这些新特性


{注意} 以前的 Blade 组件 @component 语法没有被移除。


HTTP 客户端



HTTP 客户端是 Guzzle 的一个封装,由 Adam Wathan,Jason McCreary,和 Taylor Otwell 提供。


Laravel 现在提供一套围绕 Guzzle HTTP 客户端]


(http://docs.guzzlephp.org/en/stable/) 构建的精简且高效的 API,允许你快速向其它 web 应用发起 HTTP 请求。Laravel 基于 Guzzle 的封装专注于最常见的用例和最棒的开发人员体验。例如,客户端发起带 JSON 数据的 POST 请求变得轻而易举:


use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([
    'X-First' => 'foo'
    'X-Second' => 'bar'
])->post('http://test.com/users', [
    'name' => 'Taylor',
]);
return $response['id'];


此外,HTTP 客户端还提供了令人惊叹且易于使用的测试功能:


Http::fake([
    // Stub a JSON response for GitHub endpoints...
    'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']),
    // Stub a string response for Google endpoints...
    'google.com/*' => Http::response('Hello World', 200, ['Headers']),
    // Stub a series of responses for Facebook endpoints...
    'facebook.com/*' => Http::sequence()
                            ->push('Hello World', 200)
                            ->push(['foo' => 'bar'], 200)
                            ->pushStatus(404),
]);


了解更多 HTTP 客户端的特性,请查阅 HTTP 客户端文档.


流畅的字符串操作


流畅的字符串操作由 Taylor Otwell 开发贡献 。


你可能对 Laravel 已有的 Illuminate\Support\Str 这个类比较熟悉,它提供了各种有用的字符串操作函数。基于这些函数, Laravel 7 现在提供了一个更加面向对象的、更加流畅的字符串操作库。你可以使用 Str::of 方法创建一个 Illuminate\Support\Stringable 对象。 然后可以使用该对象的各种方法去操作字符串:


return (string) Str::of('  Laravel Framework 6.x ')
                    ->trim()
                    ->replace('6.x', '7.x')
                    ->slug();


有关流畅的字符串操作可用方法的更多信息, 请查阅完整文档。


目录
相关文章
|
2月前
|
Web App开发 移动开发 前端开发
uniapp环境H5运行及发行(入门必学)
uniapp环境H5运行及发行(入门必学)
239 5
|
5月前
|
PHP 开发者
PHP框架中Laravel排名?
【7月更文挑战第2天】PHP框架中Laravel排名?
38 0
|
JavaScript 前端开发 程序员
从零开发和发布自己的wordpress插件到官方插件库完全指南
wordpress是一款很流行的开源博客程序,全世界有很多网站都在使用wordpress,程序员们也喜欢拿来做自己的技术博客,对于自己不满意的地方,那肯定也需要自己动手来修改了,下面就介绍从开发到发布一个wordpress插件的完整流程
166 0
|
自然语言处理 API Python
喜大普奔!Django官方文档终于出中文版了
之前对于 Django 的学习我一直推荐看官方文档,但不得不加上一句“如果你英语水平允许的话……”。现在总算是等来好日子了。各位想向网站/服务器开发方向进阶的同学不要错过,这份官方文档的价值绝对超过市面上任何一本 Django 教材。
|
开发框架 JavaScript 安全
基于Thinkphp的开源管理系统
基于Thinkphp的开源管理系统
244 0
基于Thinkphp的开源管理系统
|
XML 前端开发 安全
Laravel安装指南
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
570 0
|
SQL 缓存 关系型数据库
Laravel 7发行说明( 二)
Laravel 7发行说明( 二)
184 0
Laravel 7发行说明( 二)
|
PHP
【laravel】安装
【laravel】安装
146 0
【laravel】安装
|
SQL 缓存 API
基于Laravel的国产开源CMS,支持Swoole,含API接口
MyCms是一款基于Laravel开发的开源免费的自媒体博客CMS系统,适用于个人网站及企业网站开发使用。MyCms基于Apache2.0开源协议发布,免费且不限制商业使用,欢迎持续关注我们。
453 0
|
开发框架 API PHP
Phper必备的50个开源开发包
2019年最受欢迎的50个PHP开源项目,汇智网翻译整理。 如果希望快速掌握区块链应用的开发,推荐汇智网的 区块链应用开发系列教程, 内容涵盖比特币、以太坊、eos、超级账本fabric和tendermint等多种区块链, 以及php、 java、go、nodejs、python、dart等多种开发语言 1、Laravel Laravel是一个为Web开发者打造的PHP开发框架。
1760 0