2016年10月4日 星期二

Laravel 5.2.23 新特性预览

截至发布这篇文章的时候,Laravel 在 Github 上已经有 911 名贡献者,他们中的一些人正在帮助框架在日常的基础上加入一些更棒的东西。下面总结了一下 Laravel 5.2.23 中将加入的一些新功能。

1. in_array() 校验规则

Laravel 中的数组校验是非常棒的,最近我把我项目中的很多代码进行了替换,只需要简短的几行代码。在 5.2.23 中将加入一个新的规则,帮助校验一个 key 的值是否在另一个相关的 key 中。
  1. Validator::make(
  2. [
  3. 'devices' => [['user_id' => 1], ['user_id' => 2]],
  4. 'users' => [['id' => 1, ['id' => 2]]]
  5. ],
  6. ['devices.*.user_id' => 'in_array:users.*.id']
  7. );
这段代码会确保 user_id 的值都在 users 中。

2. Arr::first() & Arr::last() 提供了可选的回调函数

在前一个版本中,回调函数作为第二个参数是必选的,而在 5.2.23 中将变成可选参数。
  1. $array = [100, 200, 300];
  2.  
  3. // (NEW) This will return 100
  4. Arr::first($array); /** same for **/ array_first($array);
  5.  
  6. // (NEW) This will return 300
  7. Arr::last($array); /** same for **/ array_last($array);
  8.  
  9. // (You still can) do this and return 200
  10. Arr::first($array, function ($key, $value) {
  11. return $value >= 150;
  12. });

3. 一次指定多个中间件

当为控制器添加中间件的时候,现在可以在一条语句中注册多个中间件了。
  1. $this->middleware(['auth', 'subscribed'], ['only' => ['getCandy']]);

4. Blade 中添加了新的指令 @php, @endphp, @unset

@php 指令允许你这样写 PHP 语句:
  1. @php($count = 1)
  2.  
  3. @php(++ $count)
  1. @php
  2. $now = new DateTime();
  3.  
  4. $environment = isset($env) ? $env : "testing";
  5. @enphp
@unset() 其实就是对 unset() 的一个封装:
  1. @unset($count)

5. 重写 Blade 核心指令的能力

在 5.2.23 之前你是不能扩展 Blade 和重写核心指令的,而现在你可以重写任何的核心指令。

6. 避免编译 Blade 指令

现在你可以在 Blade 指令前添加一个 @ 符号来避免编译指令。
  1. // output:
  2. @continue
  3.  
  4. // output: @continue
  5. @@continue

7. 对 SparkPost 新的邮件驱动

8. 新的调度命令 monthlyOn()

  1. $schedule->call(function () {
  2. DB::table('shopping_list')->delete();
  3. })->monthlyOn(4, '12:00');

9. 新的 app()->isLocale() 方法

  1. // Instead of this
  2. if (app()->getLocale() == 'en')
  3.  
  4. // You can do that
  5. if (app()->isLocale('en'))

10. 使用查询生成器查询 MySQL 5.7 生成 JSON 字段更加流畅

MySQL 5.7 发布后,引入了一个新的 JSON 类型的字段,在 Laravel 5.2.23 中你可以像之前那样快速的查询出 Json 字段。
假设我们的 users 表中有个 JSON 类型的 name 列,其中有下面这样一个值:
  1. {"en":"name","ar":"nom"}
你可以使用下面的语法查询该值:
  1. User::where('name->en', 'name')->get();
  2.  
  3. // You may dive deep in the JSON string using the `->` operator.
  4. User::where('contacts->phone->home', 1234);

11. 测试辅助方法 seeElement() 和 dontSeeElement()

假设有下面这样的元素:
  1. width="100" height="50">
你可以使用下面的测试方法:
  1. $this->seeElement('image', ['width' => 100, 'height' => 50]);
  2.  
  3. $this->dontSeeElement('image', ['class' => 'video']);

12. 隐藏福利 #1

你知道你已经可以这么做了吗?
  1. User::whereNameAndEmail('jon', 'jon@theWall.com')->first();
  2.  
  3. User::whereNameAndEmailOrPhone('jon', 'jon@theWall.com', '123321')->first();
  4.  
  5. DB::table('users')->whereEmailOrUsername('mail@mail.com', 'themsaid')->first();

13. 隐藏福利 #2

  1. // Instead of this:
  2. if(!$item){
  3. abort(404);
  4. }
  5.  
  6. // You can do that:
  7. abort_unless($item);
  8.  
  9. // You may also have something like this:
  10. abort_if($item->is_hidden);
译自:themsaid,转载请注明来自 Specs’ Blog

from : http://9iphp.com/web/laravel/look-whats-coming-laravel-5-2-23.html

沒有留言:

wibiya widget