Laravel 5.5 辅助函数文档更新内容

骏妞儿今天翻译了一遍 Laravel 5.5 的辅助函数文档,把新增的函数整理一下广而告之 :point_down:

array_random()

该函数从数组中返回一个随机值:

$array = [1, 2, 3, 4, 5];

$random = array_random($array);

// 4 - (随机获取)

你也可以指定要返回的随机数的数量作为第二个可选参数。一旦你指定了第二个参数,即使数量为 1,这个函数也会返回一个数组:

$items = array_random($array, 2);

// [2, 5] - (随机获取)

data_fill()

该函数使用「点」符号在嵌套数组或对象内设置缺少的值:

$data = ['products' => ['desk' => ['price' => 100]]];

data_fill($data, 'products.desk.price', 200);

// ['products' => ['desk' => ['price' => 100]]]

data_fill($data, 'products.desk.discount', 10);

// ['products' => ['desk' => ['price' => 100, 'discount' => 10]]]

该函数也接受星号「*」作为通配符,并相应地填写目标:

$data = [
    'products' => [
        ['name' => 'Desk 1', 'price' => 100],
        ['name' => 'Desk 2'],
    ],
];

data_fill($data, 'products.*.price', 200);

/*
    [
        'products' => [
            ['name' => 'Desk 1', 'price' => 100],
            ['name' => 'Desk 2', 'price' => 200],
        ],
    ]
*/

data_get()

该函数使用「点」符号从嵌套数组或对象中检索值:

$data = ['products' => ['desk' => ['price' => 100]]];

$price = data_get($data, 'products.desk.price');

// 100

该函数还接受默认值作为第三个参数,如果找不到指定的键,将返回该值:

$discount = data_get($data, 'products.desk.discount', 0);

// 0

__()

该函数使用你的本地化文件来翻译给定的翻译字符串或翻译键:

echo __('Welcome to our application');

echo __('messages.welcome');

如果指定的翻译字符串或键不存在,则 __ 函数会简单地返回给定的值。所以,按照上面的例子,如果翻译键 messages.welcome 不存在,__ 方法会将其直接返回。

preg_replace_array()

该函数使用数组顺序替换字符串中的给定模式:

$string = '活动将在 :start 和 :end 之间进行';

$replaced = preg_replace_array('/:[a-z_]+/', ['8:30', '9:00'], $string);

// 活动将在 8:30 至 9:00 之间进行

str_before()

该函数返回字符串中给定值之前的所有内容:

$slice = str_before('This is my name', 'my name');

// 'This is '

str_replace_array()

该函数使用数组顺序替换字符串中的给定值:

$string = 'The event will take place between ? and ?';

$replaced = str_replace_array('?', ['8:30', '9:00'], $string);

// The event will take place between 8:30 and 9:00

str_replace_first()

该函数替换字符串中给定值的第一个匹配项:

$replaced = str_replace_first('the', 'a', 'the quick brown fox jumps over the lazy dog');

// a quick brown fox jumps over the lazy dog

str_replace_last()

该函数替换字符串中最后一次出现的给定值:

$replaced = str_replace_last('the', 'a', 'the quick brown fox jumps over the lazy dog');

// the quick brown fox jumps over a lazy dog

str_start()

该函数将给定值的单个实例添加到字符串(如果它尚未以值开始):

$adjusted = str_start('this/string', '/');

// /this/string

$adjusted = str_start('/this/string/', '/');

// /this/string

app()

该函数返回服务容器实例

$container = app();

你可以传递一个类或接口名称来从容器中解析它:

$api = app('HelpSpot\API');

broadcast()

该函数将广播给定的事件到它的监听器:

broadcast(new UserRegistered($user));

blank()

该函数判断给定的值是否为「空」:

blank('');
blank('   ');
blank(null);
blank(collect());

// true

blank(0);
blank(true);
blank(false);

// false

class_uses_recursive()

该函数返回一个类使用的所有 traits,包括任何子类使用的 traits:

$traits = class_uses_recursive(App\User::class);

cookie()

该函数创建一个新的 cookie 实例:

$cookie = cookie('name', 'value', $minutes);

decrypt()

该函数使用 Laravel 的 encryption 来解密给定的值:

$decrypted = decrypt($encrypted_value);

dispatch_now()

该函数立即运行给定的任务,并从其 handle 方法返回值:

$result = dispatch_now(new App\Jobs\SendEmails);

dump()

该函数打印给定的变量:

dump($value);

dump($value1, $value2, $value3, ...);

encrypt()

该函数使用 Laravel 的 encryption 对给定的值进行加密:

$encrypted = encrypt($unencrypted_value);

filled()

该函数判断给定的值是否不为「空」:

filled(0);
filled(true);
filled(false);

// true

filled('');
filled('   ');
filled(null);
filled(collect());

// false

now()

该函数为当前时间创建一个新的 Illuminate\Support\Carbon 实例:

$now = now();

optional()

该函数可以接受任何参数,并且允许你访问该对象的属性或者调用方法。如果给定的对象是 null , 那么属性和方法会简单地返回 null 而不是产生一个错误:

return optional($user->address)->street;

{!! old('name', optional($user)->name) !!}

policy()

该方法为给定的类获取一个策略实例:

$policy = policy(App\User::class);

report()

该函数将使用异常处理程序的 report 方法抛出异常:

report($e);

rescue()

该函数执行给定的闭包并捕获执行期间发生的任何异常。所有被捕获的异常将被发送到你的异常处理程序的 report 方法。要注意的是,该请求将继续处理:

return rescue(function () {
    return $this->method();
});

你也可以将第二个参数传递给 rescue 方法。如果在执行闭包时发生异常,这个参数将是应该返回的默认值:

return rescue(function () {
    return $this->method();
}, false);

return rescue(function () {
    return $this->method();
}, function () {
    return $this->failure();
});

resolve()

该函数使用服务容器将给定的类或接口名称解析为其实例:

$api = resolve('HelpSpot\API');

tap()

该函数接受两个参数:一个任意的 $value 和一个闭包。$value 将被传递给闭包,然后由 tap 函数返回。不需要在闭包中使用 return 返回值。

$user = tap(User::first(), function ($user) {
    $user->name = 'taylor';

    $user->save();
});

如果没有闭包被传递给 tap 函数,你可以调用给定 $value 的任何方法。而你调用的方法的返回值始终为 $value ,无论方法在其定义中实际返回的是什么。例如,Eloquent 的 update 方法通常会返回一个整数。但是,我们可以强制通过 tap 函数链式调用 update 方法来返回模型本身:

$user = tap($user)->update([
    'name' => $name,
    'email' => $email,
]);

today()

该函数为当前日期创建一个新的 Illuminate\Support\Carbon 实例:

$today = today();

throw_if()

如果给定的布尔表达式计算结果为 truethrow_if 函数抛出给定的异常:

throw_if(! Auth::user()->isAdmin(), AuthorizationException::class);

throw_if(
    ! Auth::user()->isAdmin(),
    AuthorizationException::class,
    'You are not allowed to access this page'
);

throw_unless()

如果给定的布尔表达式计算结果为 false,则 throw_unless函数会抛出给定的异常:

throw_unless(Auth::user()->isAdmin(), AuthorizationException::class);

throw_unless(
    Auth::user()->isAdmin(),
    AuthorizationException::class,
    'You are not allowed to access this page'
);

trait_uses_recursive()

该函数返回一个类使用的所有 trait:

$traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);

transform()

如果给定的值不为空,那么 transform 函数对给定的值执行闭包并返回其结果:

$callback = function ($value) {
    return $value * 2;
};

$result = transform(5, $callback);

// 10

默认值或闭包也可以作为方法的第三个参数传递。如果给定值为空白,则返回该值:

$result = transform(null, $callback, 'The value is blank');

// The value is blank

validator()

该函数用给定的参数创建一个新的验证器实例。为方便起见,你可以使用它来代替 Validator facade :

$validator = validator($data, $rules, $messages);

with()

该函数会返回给定的值。如果传入一个闭包作为该函数的第二个参数,会返回闭包执行的结果:

$callback = function ($value) {
    return (is_numeric($value)) ? $value * 2 : 0;
};

$result = with(5, $callback);

// 10

$result = with(null, $callback);

// 0

$result = with(5, null);

// 5

更多详情看 文档

本作品采用《CC 协议》,转载必须注明作者和本文链接
Stay Hungry, Stay Foolish.
本帖由 Summer 于 6年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 8

:thumbsup::thumbsup::thumbsup:

6年前 评论

我想索三个字:
666

6年前 评论

:+1: 你终于回来了

6年前 评论

:sweat_smile: 嘛,前段日子赶项目忙不过来

6年前 评论
fatrbaby

牛批!

6年前 评论

5.5新增的函数很少的 ...

这里列出的很多函数都是5.2、5.4添加的

6年前 评论

@finull 可是文档的更新只有 5.5 有嘛

6年前 评论

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