1Laravel Jetstream
版本8引入了Laravel Jetstream,它是具有时尚用户仪表板的框架应用程序支架。Jetstream处理从登录,注册和电子邮件验证到会话管理和可选团队管理的所有事务。它使用高度可定制的CSS框架Tailwind设计,可在Livewire和Inertia之间进行选择。
首先,运行以下命令:
npm install && npm run dev
php artisan serve
确保将数据库名称添加到.env文件并进行迁移。
刷新后,您会看到通常的Laravel欢迎页面(尽管看起来有些不同,而且更加流畅)。单击注册链接以注册您的帐户,并导航/dashboard
以查看新的仪表板:
此时,如果您运行
php artisan vendor:publish — tag=jetstream-views
并查看下方resources/views/vendor/jetstream/components
,将立即获得可用的可用组件列表。welcome.blade.php
例如,将在您的应用程序中用作<x-jet-welcome />
。
2.模型目录
瞧,我们一直在等待-模型目录!
在版本8之前,所有现有和新生成的模型都位于框架/app
目录的根目录中。然后大多数人将创建一个Models
子文件夹,将所有模型移动到所述文件夹并更改其名称空间以反映新路径。当我说我们不热衷于这种设置时,我想我为社区代言!但是,通过最新的更新,Otwell可以弥补这一不足。所有模型生成器命令均已更新,可以将新模型放置在*Models*
文件夹中。如果该目录尚不存在,则会为您创建一个目录以及新模型。
3.模型工厂类
基于类的工厂取代了我们以前知道的模型工厂。
Laravel 7
/ **
*运行数据库种子。
*
* @return void
* /
公共功能run()
{
factory(App \ User :: class,50)-> create()-> each(function($ user){
$ user-> posts()-> save( factory(App \ Post :: class)-> make());
});
}
Laravel 8
use App \ Models \ User;/ **
*运行数据库种子。
*
* @return void
* /
public function run()
{
User :: factory()
-> times(50)
-> hasPosts(1)
-> create();
}
4.迁移压缩
这项很酷的新功能使笨重的迁移文件夹已成为过去。引入了迁移压缩,使所有迁移都可以压缩到单个SQL文件中。
运行以下命令将创建一个带有SQL文件的文件schema
夹database
,该文件包含用于所有迁移的CREATE TABLE查询:
PHP的工匠模式:转储
要删除仅保留SQL文件的迁移,请运行以下命令:
php artisan schema:dump --prune
php artisan migrate
然后将首先运行SQL模式,然后运行尚未包含在文件中的任何新迁移migrations
。要包括向架构文件的新迁移,只需schema:dump
再次运行命令。
5.作业分批
Laravel的新作业批处理功能允许使用立面的新batch
方法分派多个作业Bus
。然后,您当然可以使用和之类的方法then
,finally
并catch
自定义其完成方式。
6.改进的速率限制
与以前的版本相比,现在可以以更加灵活和封装的方式来设置路由的命中率限制。使用RateLimiter
立面的for
方法,可以设置极限时间,甚至可以根据接收到的时间动态设置极限时间$request
。
Laravel 7
Route::middleware('auth:api','throttle:60,1')-> group(function(){
Route :: get('/ user',function(){
//
});
});
Laravel 8
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
RateLimiter :: for('global',function(Request $ request){
return $ request-> user()-> vipCustomer() ? Limit :: none() : Limit :: perMinute(100);
});
要在某些路由上利用这些限制,请像使用任何传递给该for
方法的名称的中间件一样应用它们:
Route::middleware(['throttle:global'])->group(function(){
Route::post('/audio',function(){
});
Route :: post('/video',function(){
});
});
但是,为了使用先前版本的throttle
中间件API ,已经保持了向后兼容性。
7.改进的维护模式
尽管您的应用程序处于维护模式,但是Laravel允许特定用户查看它,只要他们满足特定条件即可。现在,这种情况已更改-以前需要IP地址,现在是秘密令牌。
Laravel 7
php artisan down --allow = 127.0.0.1 --allow = 192.168.0.0 / 16
Laravel 8
php artisan down --secret =“ 1630542a-246b-4b66-afa1-dd72a4c43515”
将Cookie保存到浏览器后,就可以像在维护模式之外一样重新访问该应用程序!
预渲染维护模式视图
作为维护模式改进的一部分,您现在可以预渲染特定的维护视图。
php artisan down
在部署期间运行,那么在更新任何依赖关系以反映新模式之前,如果用户点击应用程序,仍然有可能遇到错误。使用此添加项,可以指定您选择的维护模式视图,并在请求周期开始时立即显示该视图,因此无需等待框架启动。
php artisan down --render =“错误:: 503”
8.封闭调度/链
添加了一个新catch
方法,如果排队关闭无法成功完成,将执行该方法。这对于自定义发生故障时发生的情况非常有用。
Laravel 7
$ podcast = App \ Podcast :: find(1);dispatch(function()use($ podcast){
$ podcast-> publish();
});
Laravel 8
$ podcast = App \ Podcast :: find(1);dispatch(function()use($ podcast){
$ podcast-> publish();
})-> catch(function(Throwable $ e){
//这项工作失败了...
});
9.动态刀片组件
现在,您不再需要将组件名称硬编码到页面上,而可以根据运行时值或变量来呈现它们!
Laravel 7
php artisan make:componentsicence
要显示组件,您将使用以下命令:
Laravel 8
让我们看看如何实现此目标。
首先,使用创建组件php artisan make:component <component-name>
。我决定打电话给我success
:
然后选择一条路线,并通过其控制器将相关数据传递到视图:
选择在中渲染动态组件show.blade.php
。/user/profile
现在,从仪表板导航到,应显示成功文本:
这对于动态加载成功或错误组件非常有用。只需将名称传递给视图(在此示例中,变量为message,值即为成功),只要有一个具有该名称的组件,Laravel就会为您动态呈现它。
10.事件监听器的改进
事件侦听器已得到改进,以包括Closure
基于事件侦听器的注册。这可以通过仅将传递Closure
给Event::listen
方法来完成。此外,这些新的Closure
基于事件的监听器也可以被标记为queueable
和,像排队的作业,通常的现有方法- onConnection
,onQueue
和delay
-可被用于定制排队听者的执行。
Event :: listen(queueable(function(PodcastProcessed $ event){
//
}));
queueable
当然,标记是可选的,可以删除。
11.时间测试助手
此新更新为我们带来了一些帮助程序,这些帮助程序允许修改测试时返回的时间戳。的介绍travel()
可与著名now()
人士一起使用,以进入未来,穿越时空并回到现在。
//进入过去的
$ this-> travel(-5)-> hours();//回到现在的
$ this-> travelBack();</pre>
12.根据环境变化自动重新加载
.env
现在,在文件中检测到的所有更改都将触发自动重新加载,而无需手动停止和重新启动serve
命令。
1 Tailwind成为分页器的默认样式
但是Bootstrap 3和Bootstrap 4视图仍然可用!
14.路由命名空间更新
RouteServiceProvider
版本7及更低版本中的类包含一个$namespace
属性。然后将此属性的值添加到路由文件中列出的所有路由的前缀。Laravel的此较新版本删除了名称空间,而类名直接在路由文件中使用。
Laravel 7
RouteServiceProvider extends ServiceProvider{
/ ***此名称空间适用于您的控制器路由。*另外,它被设置为URL生成器的根名称空间。** @var字符串* /
protected $namespace ='App\Http\Controllers';
}
Route: get('/users','UserController@index');
Laravel8
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
网友评论