辅助函数

简介

Laravel 包含各种各样的全局 PHP 「辅助」函数,框架本身也大量的使用了这些功能函数;如果你觉的方便,你可以在你的应用中任意使用这些函数。

可用方法

数组 & 对象

Arr::add
Arr::collapse
Arr::crossJoin
Arr::divide
Arr::dot
Arr::except
Arr::first
Arr::flatten
Arr::forget
Arr::get
Arr::has
Arr::isAssoc
Arr::last
Arr::only
Arr::pluck
Arr::prepend
Arr::pull
Arr::random
Arr::query
Arr::set
Arr::shuffle
Arr::sort
Arr::sortRecursive
Arr::where
Arr::wrap
data_fill
data_get
data_set
head
last

路径

app_path
base_path
config_path
database_path
mix
public_path
resource_path
storage_path

字符串

__
class_basename
e
preg_replace_array
Str::after
Str::afterLast
Str::before
Str::beforeLast
Str::camel
Str::contains
Str::containsAll
Str::endsWith
Str::finish
Str::is
Str::isUuid
Str::kebab
Str::limit
Str::orderedUuid
Str::plural
Str::random
Str::replaceArray
Str::replaceFirst
Str::replaceLast
Str::singular
Str::slug
Str::snake
Str::start
Str::startsWith
Str::studly
Str::title
Str::ucfirst
Str::uuid
Str::words
trans
trans_choice

流畅的字符串

after
afterLast
append
ascii
basename
before
beforeLast
camel
contains
containsAll
dirname
endsWith
exactly
explode
finish
is
isAscii
isEmpty
kebab
length
limit
lower
match
matchAll
plural
prepend
replace
replaceArray
replaceFirst
replaceLast
replaceMatches
start
upper
title
singular
slug
snake
startsWith
studly
substr
trim
ucfirst
whenEmpty
words

URLs

action
asset
route
secure_asset
secure_url
url

其他

abort
abort_if
abort_unless
app
auth
back
bcrypt
blank
broadcast
cache
class_uses_recursive
collect
config
cookie
csrf_field
csrf_token
dd
decrypt
dispatch
dispatch_now
dump
encrypt
env
event
factory
filled
info
logger
method_field
now
old
optional
policy
redirect
report
request
rescue
resolve
response
retry
session
tap
throw_if
throw_unless
today
trait_uses_recursive
transform
validator
value
view
with

方法列表

数组 & 对象

Arr::add() {#collection-method .first-collection-method}

如果给定的键在数组中不存在或数组被设置为 null ,那么 Arr::add 函数将会把给定的键值对添加到数组中:

use Illuminate\Support\Arr;

$array = Arr::add(['name' => 'Desk'], 'price', 100);

// ['name' => 'Desk', 'price' => 100]

$array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);

// ['name' => 'Desk', 'price' => 100]

Arr::collapse() {#collection-method}

Arr::collapse 函数将多个数组合并为一个数组:

use Illuminate\Support\Arr;

$array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);

// [1, 2, 3, 4, 5, 6, 7, 8, 9]

Arr::crossJoin() {#collection-method}

Arr :: crossJoin 函数交叉连接给定的数组,返回具有所有可能排列的笛卡尔乘积:

use Illuminate\Support\Arr;

$matrix = Arr::crossJoin([1, 2], ['a', 'b']);

/*
    [
        [1, 'a'],
        [1, 'b'],
        [2, 'a'],
        [2, 'b'],
    ]
*/

$matrix = Arr::crossJoin([1, 2], ['a', 'b'], ['I', 'II']);

/*
    [
        [1, 'a', 'I'],
        [1, 'a', 'II'],
        [1, 'b', 'I'],
        [1, 'b', 'II'],
        [2, 'a', 'I'],
        [2, 'a', 'II'],
        [2, 'b', 'I'],
        [2, 'b', 'II'],
    ]
*/

Arr::divide() {#collection-method}

Arr::divide 函数返回一个二维数组,一个值包含原始数组的键,另一个值包含原始数组的值:

use Illuminate\Support\Arr;

[$keys, $values] = Arr::divide(['name' => 'Desk']);

// $keys: ['name']

// $values: ['Desk']

Arr::dot() {#collection-method}

Arr::dot 函数将多维数组中所有的键平铺到一维数组中,新数组使用「.」符号表示层级包含关系:

use Illuminate\Support\Arr;

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

$flattened = Arr::dot($array);

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

Arr::except() {#collection-method}

Arr::except 函数从数组中删除指定的键值对:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100];

$filtered = Arr::except($array, ['price']);

// ['name' => 'Desk']

Arr::first() {#collection-method}

Arr::first 函数返回数组中通过真值测试的第一个元素:

use Illuminate\Support\Arr;

$array = [100, 200, 300];

$first = Arr::first($array, function ($value, $key) {
    return $value >= 150;
});

// 200

将默认值作为第三个参数传递给该方法, 如果数组中没有值通过真值测试,则返回默认值:

use Illuminate\Support\Arr;

$first = Arr::first($array, $callback, $default);

Arr::flatten() {#collection-method}

Arr::flatten 函数将多维数组中数组的值取出平铺为一维数组:

use Illuminate\Support\Arr;

$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];

$flattened = Arr::flatten($array);

// ['Joe', 'PHP', 'Ruby']

Arr::forget() {#collection-method}

Arr::forget 函数使用「.」符号从深度嵌套的数组中删除给定的键值对:

use Illuminate\Support\Arr;

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

Arr::forget($array, 'products.desk');

// ['products' => []]

Arr::get() {#collection-method}

Arr::get 函数使用「.」符号从深度嵌套的数组中根据指定键检索值:

use Illuminate\Support\Arr;

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

$price = Arr::get($array, 'products.desk.price');

// 100

Arr::get 函数也接受一个默认值,如果没有找到特定的键,将返回默认值:

use Illuminate\Support\Arr;

$discount = Arr::get($array, 'products.desk.discount', 0);

// 0

Arr::has() {#collection-method}

Arr::has 函数使用「.」符号查找数组中是否存在指定的一个或多个键:

use Illuminate\Support\Arr;

$array = ['product' => ['name' => 'Desk', 'price' => 100]];

$contains = Arr::has($array, 'product.name');

// true

$contains = Arr::has($array, ['product.price', 'product.discount']);

// false

Arr::isAssoc() {#collection-method}

如果给定数组是关联数组,则 Arr::isAssoc 函数返回 true 。如果数组没有以零开头的连续数字键,则将其视为“关联”。

use Illuminate\Support\Arr;

$isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]);

// true

$isAssoc = Arr::isAssoc([1, 2, 3]);

// false

Arr::last() {#collection-method}

Arr::last 函数返回数组中满足指定条件的最后一个元素:

use Illuminate\Support\Arr;

$array = [100, 200, 300, 110];

$last = Arr::last($array, function ($value, $key) {
    return $value >= 150;
});

// 300

将默认值作为第三个参数传递给该方法,如果没有值通过真值测试,则返回该默认值:

use Illuminate\Support\Arr;

$last = Arr::last($array, $callback, $default);

Arr::only() {#collection-method}

Arr::only 函数只返回给定数组中指定的键值对:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];

$slice = Arr::only($array, ['name', 'price']);

// ['name' => 'Desk', 'price' => 100]

Arr::pluck() {#collection-method}

Arr::pluck 函数从数组中检索给定键的所有值:

use Illuminate\Support\Arr;

$array = [
    ['developer' => ['id' => 1, 'name' => 'Taylor']],
    ['developer' => ['id' => 2, 'name' => 'Abigail']],
];

$names = Arr::pluck($array, 'developer.name');

// ['Taylor', 'Abigail']

你也可以指定获取的结果的键:

use Illuminate\Support\Arr;

$names = Arr::pluck($array, 'developer.name', 'developer.id');

// [1 => 'Taylor', 2 => 'Abigail']

Arr::prepend() {#collection-method}

Arr::prepend 函数将一个值插入到数组的开始位置:

use Illuminate\Support\Arr;

$array = ['one', 'two', 'three', 'four'];

$array = Arr::prepend($array, 'zero');

// ['zero', 'one', 'two', 'three', 'four']

如果需要,你可以指定你插入值的键:

use Illuminate\Support\Arr;

$array = ['price' => 100];

$array = Arr::prepend($array, 'Desk', 'name');

// ['name' => 'Desk', 'price' => 100]

Arr::pull() {#collection-method}

Arr::pull 函数从数组中返回指定键的值并删除此键/值对:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100];

$name = Arr::pull($array, 'name');

// $name: Desk

// $array: ['price' => 100]

默认值可以作为第三个参数传递给该方法,如果键不存在,则返回该值:

use Illuminate\Support\Arr;

$value = Arr::pull($array, $key, $default);

Arr::random() {#collection-method}

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

use Illuminate\Support\Arr;

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

$random = Arr::random($array);

// 4 - (retrieved randomly)

你也可以将返回值的数量作为可选的第二个参数传递给该方法,请注意,提供这个参数会返回一个数组,即使是你只需要一项:

use Illuminate\Support\Arr;

$items = Arr::random($array, 2);

// [2, 5] - (retrieved randomly)

Arr::query() {#collection-method}

Arr::query 函数将数组转换为查询字符串:

use Illuminate\Support\Arr;

$array = ['name' => 'Taylor', 'order' => ['column' => 'created_at', 'direction' => 'desc']];

Arr::query($array);

// name=Taylor&order[column]=created_at&order[direction]=desc

Arr::set() {#collection-method}

Arr::set 函数使用「.」符号在多维数组中设置指定键的值:

use Illuminate\Support\Arr;

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

Arr::set($array, 'products.desk.price', 200);

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

Arr::shuffle() {#collection-method}

Arr::shuffle 函数将数组中值进行随机排序:

use Illuminate\Support\Arr;

$array = Arr::shuffle([1, 2, 3, 4, 5]);

// [3, 2, 5, 1, 4] - (generated randomly)

Arr::sort() {#collection-method}

Arr::sort 函数根据数组的值对数组进行排序:

use Illuminate\Support\Arr;

$array = ['Desk', 'Table', 'Chair'];

$sorted = Arr::sort($array);

// ['Chair', 'Desk', 'Table']

你也可以根据给定闭包返回的结果对数组进行排序:

use Illuminate\Support\Arr;

$array = [
    ['name' => 'Desk'],
    ['name' => 'Table'],
    ['name' => 'Chair'],
];

$sorted = array_values(Arr::sort($array, function ($value) {
    return $value['name'];
}));

/*
    [
        ['name' => 'Chair'],
        ['name' => 'Desk'],
        ['name' => 'Table'],
    ]
*/

Arr::sortRecursive() {#collection-method}

Arr::sortRecursive 函数使用 sort 函数对数值子数组进行递归排序,使用 ksort 函数对关联子数组进行递归排序:

use Illuminate\Support\Arr;

$array = [
    ['Roman', 'Taylor', 'Li'],
    ['PHP', 'Ruby', 'JavaScript'],
    ['one' => 1, 'two' => 2, 'three' => 3],
];

$sorted = Arr::sortRecursive($array);

/*
    [
        ['JavaScript', 'PHP', 'Ruby'],
        ['one' => 1, 'three' => 3, 'two' => 2],
        ['Li', 'Roman', 'Taylor'],
    ]
*/

Arr::where() {#collection-method}

Arr::where 函数使用给定闭包返回的结果过滤数组:

use Illuminate\Support\Arr;

$array = [100, '200', 300, '400', 500];

$filtered = Arr::where($array, function ($value, $key) {
    return is_string($value);
});

// [1 => '200', 3 => '400']

Arr::wrap() {#collection-method}

Arr::wrap 方法可以将给定值转换为一个数组。如果给定值已经是一个数组,将不会进行转换:

use Illuminate\Support\Arr;

$string = 'Laravel';

$array = Arr::wrap($string);

// ['Laravel']

如果给定值是 null ,将返回一个空数组:

use Illuminate\Support\Arr;

$nothing = null;

$array = Arr::wrap($nothing);

// []

data_fill() {#collection-method}

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() {#collection-method}

data_get 函数可使用 . 形式获得嵌套函数或者对象中的值:

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

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

// 100

当找不到指定键名时,data_get 函数也支持返回一个默认值:

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

// 0

这个函数也可以接受一个 * 作为通配符,以匹配数组或对象中任意键名:

$data = [
    'product-one' => ['name' => 'Desk 1', 'price' => 100],
    'product-two' => ['name' => 'Desk 2', 'price' => 150],
];

data_get($data, '*.name');

// ['Desk 1', 'Desk 2'];

data_set() {#collection-method}

data_set 函数可以用 . 形式给嵌套函数或对象赋值:

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

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

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

这个函数也支持使用 * 作为通配符给相应键名赋值:

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

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

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

通常情况下,已存在的值将会被覆盖。如果只是希望设置一个目前不存在的值,你可以增加一个 false 作为函数的第四个参数:

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

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

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

head() {#collection-method}

head 函数将返回数组中的第一个值:

$array = [100, 200, 300];

$first = head($array);

// 100

last() {#collection-method}

last 返回给定数组的最后一个元素:

$array = [100, 200, 300];

$last = last($array);

// 300

路径

app_path() {#collection-method}

app_path 函数返回 app 目录的完整路径。 你也可以用 app_path 函数去生成应用程序目录下一个文件的完整路径:

$path = app_path();

$path = app_path('Http/Controllers/Controller.php');

base_path() {#collection-method}

base_path 函数返回项目根目录的完整路径。 你也可以用 base_path 函数生成项目根目录下一个文件的完整路径:

$path = base_path();

$path = base_path('vendor/bin');

config_path() {#collection-method}

config_path 函数返回 config 目录的完整路径。你也可以用 config_path 函数去生成应用程序配置目录下一个指定文件的完整路径:

$path = config_path();

$path = config_path('app.php');

database_path() {#collection-method}

database_path 函数返回 database 目录的完整路径。 你也可以用 database_path 函数去生成 database 目录下一个指定文件的完整路径:

$path = database_path();

$path = database_path('factories/UserFactory.php');

mix() {#collection-method}

mix 返回 版本化MIX文件 的路径:

$path = mix('css/app.css');

public_path() {#collection-method}

public_path 函数返回 public 目录的完整路径。 你也可以用 public_path 函数去生成 public 目录下一个指定文件的完整路径:

$path = public_path();

$path = public_path('css/app.css');

resource_path() {#collection-method}

resource_path 函数返回 resources 目录的完整路径。你也可以用 resource_path 函数去生成资源文件目录下的一个指定文件的完整路径:

$path = resource_path();

$path = resource_path('sass/app.scss');

storage_path()

storage_path 函数返回指向 “storage” 目录的绝对路径。还可以使用 storage_path 函数生成storage目录下给定文件的完整路径:

$path = storage_path();

$path = storage_path('app/file.txt');

字符串函数

__()

__函数可使用 本地化文件 翻译指定的字符串或者键值:

echo __('Welcome to our application');

echo __('messages.welcome');

如果指定的转换字符串或键不存在,__ 函数将返回原来的值。即:如果messages.welcome键值不存在,则返回messages.welcome

class_basename()

class_basename 函数返回删除命名空间后的类名:

$class = class_basename('Foo\Bar\Baz');

// Baz

e()

e 函数在指定字符串上运行 htmlentities方法(double_encode参数为false):

echo e('<html>foo</html>');

// &lt;html&gt;foo&lt;/html&gt;

preg_replace_array()

preg_replace_array函数使用正则规则用给定数组替换字符串中的内容:

$string = 'The event will take place between :start and :end';

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

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

Str::after()

Str::after方法返回字符串中给定值之后的所有内容。如果字符串中不存在该值,则将返回整个字符串:

use Illuminate\Support\Str;

$slice = Str::after('This is my name', 'This is');

// ' my name'

Str::afterLast()

Str::afterLast 方法返回字符串中给定值最后一次出现后的所有内容。如果字符串中不存在该值,则将返回整个字符串:

use Illuminate\Support\Str;

$slice = Str::afterLast('App\Http\Controllers\Controller', '\\');

// 'Controller'

Str::before() {#collection-method}

Str::before方法返回字符串中给定值之前的所有内容:

use Illuminate\Support\Str;

$slice = Str::before('This is my name', 'my name');

// 'This is '

Str::beforeLast()

Str::beforeLast 方法返回字符串中给定值最后出现之前的所有内容:

use Illuminate\Support\Str;

$slice = Str::beforeLast('This is my name', 'is');

// 'This '

Str::camel()

Str::camel 方法将给定字符串转换为 camelCase(驼峰式):

use Illuminate\Support\Str;

$converted = Str::camel('foo_bar');

// fooBar

Str::contains() {#collection-method}

Str::contains 方法判断给定的字符串是否包含给定的值(区分大小写):

use Illuminate\Support\Str;

$contains = Str::contains('This is my name', 'my');

// true

你也可以传递一个数组形式的值来判断给定的字符串中是否包含数组中的任意一个值:

use Illuminate\Support\Str;

$contains = Str::contains('This is my name', ['my', 'foo']);

// true

Str::containsAll() {#collection-method}

Str::containsAll 方法判断给定的字符串中是否包含给定的数组中所有的值:

use Illuminate\Support\Str;

$containsAll = Str::containsAll('This is my name', ['my', 'name']);

// true

Str::endsWith() {#collection-method}

Str::endsWith 方法判断给定的字符串是否以给定的值结尾:

use Illuminate\Support\Str;

$result = Str::endsWith('This is my name', 'name');

// true

你也可以传递一个数组形式的值来判断给定的字符串是否以数组中的任意一个值结尾:

use Illuminate\Support\Str;

$result = Str::endsWith('This is my name', ['name', 'foo']);

// true

$result = Str::endsWith('This is my name', ['this', 'foo']);

// false

Str::finish() {#collection-method}

Str::finish 方法将给定的字符串以给定的值结尾返回(如果该字符串尚未以该值结尾):

use Illuminate\Support\Str;

$adjusted = Str::finish('this/string', '/');

// this/string/

$adjusted = Str::finish('this/string/', '/');

// this/string/

Str::is() {#collection-method}

Str::is 方法判断给定的字符串是否匹配给定的模式,星号 * 可以用来表示通配符:

use Illuminate\Support\Str;

$matches = Str::is('foo*', 'foobar');

// true

$matches = Str::is('baz*', 'foobar');

// false

Str::ucfirst() {#collection-method}

Str::ucfirst 方法将给定的字符串首字母大写并返回:

use Illuminate\Support\Str;

$string = Str::ucfirst('foo bar');

// Foo bar

Str::isUuid() {#collection-method}

Str::isUuid 方法用来确定给定的字符串是否为有效的 UUID:

use Illuminate\Support\Str;

$isUuid = Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de');

// true

$isUuid = Str::isUuid('laravel');

// false

Str::kebab() {#collection-method}

Str::kebab 方法将给定的「驼峰式」字符串转化为 kebab-case「短横式」字符串:

use Illuminate\Support\Str;

$converted = Str::kebab('fooBar');

// foo-bar

Str::limit() {#collection-method}

Str::limit 方法按给定的长度截断给定的字符串:

use Illuminate\Support\Str;

$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20);

// The quick brown fox...

你也可以传递第三个参数来改变将被追加到最后的字符串:

use Illuminate\Support\Str;

$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20, ' (...)');

// The quick brown fox (...)

Str::orderedUuid() {#collection-method}

Str::orderedUuid 方法高效生成一个可存储在索引数据库列中的「第一时间」 UUID:

use Illuminate\Support\Str;

return (string) Str::orderedUuid();

Str::plural() {#collection-method}

Str::plural 函数将字符串转换为复数形式。该函数目前仅支持英文:

use Illuminate\Support\Str;

$plural = Str::plural('car');

// cars

$plural = Str::plural('child');

// children

你可以提供一个整数作为函数的第二个参数来检索字符串的单数或复数形式:

use Illuminate\Support\Str;

$plural = Str::plural('child', 2);

// children

$plural = Str::plural('child', 1);

// child

Str::random() {#collection-method}

Str::random 函数生成一个指定长度的随机字符串。这个函数用 PHP 的 random_bytes 函数:

use Illuminate\Support\Str;

$random = Str::random(40);

Str::replaceArray() {#collection-method}

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

use Illuminate\Support\Str;

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

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

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

Str::replaceFirst() {#collection-method}

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

use Illuminate\Support\Str;

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

// a quick brown fox jumps over the lazy dog

Str::replaceLast() {#collection-method}

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

use Illuminate\Support\Str;

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

// the quick brown fox jumps over a lazy dog

Str::singular() {#collection-method}

Str::singular 函数将字符串转换为单数形式。该函数目前仅支持英文:

use Illuminate\Support\Str;

$singular = Str::singular('cars');

// car

$singular = Str::singular('children');

// child

Str::slug() {#collection-method}

Str::slug 函数将给定的字符串生成一个 URL 友好的 「slug」 :

use Illuminate\Support\Str;

$slug = Str::slug('Laravel 5 Framework', '-');

// laravel-5-framework

Str::snake() {#collection-method}

Str::snake 函数将给定的字符串转换为 snake_case「蛇式」:

use Illuminate\Support\Str;

$converted = Str::snake('fooBar');

// foo_bar

Str::start() {#collection-method}

Str::start 函数将给定值添加到给定字符串的开始位置(如果字符串尚未以给定值开始):

use Illuminate\Support\Str;

$adjusted = Str::start('this/string', '/');

// /this/string

$adjusted = Str::start('/this/string', '/');

// /this/string

Str::startsWith() {#collection-method}

Str::startsWith 函数判断给定的字符串的开头是否是指定值:

use Illuminate\Support\Str;

$result = Str::startsWith('This is my name', 'This');

// true

Str::studly() {#collection-method}

Str::studly 函数将给定的字符串转换为 「变种驼峰命名」:

use Illuminate\Support\Str;

$converted = Str::studly('foo_bar');

// FooBar

Str::title() {#collection-method}

Str::title 函数将给定的字符串转换为「首字母大写」:

use Illuminate\Support\Str;

$converted = Str::title('a nice title uses the correct case');

// A Nice Title Uses The Correct Case

Str::uuid() {#collection-method}

Str::uuid 方法生成一个 UUID(版本 4):

use Illuminate\Support\Str;

return (string) Str::uuid();

Str::words() {#collection-method}

Str::words 函数限制字符串中的单词数:

use Illuminate\Support\Str;

return Str::words('Perfectly balanced, as all things should be.', 3, ' >>>');

// Perfectly balanced, as >>>

trans() {#collection-method}

trans 函数使用你的 本地文件 转换给定的翻译密钥

echo trans('messages.welcome');

如果指定的翻译键不存在,则 trans 方法会简单地返回给定的键。所以,就上面的例子而言,如果翻译键不存在, trans 方法会返回 messages.welcome

trans_choice() {#collection-method}

trans_choice 函数根据词形变化来翻译给定的翻译键:

echo trans_choice('messages.notifications', $unreadCount);

如果指定的翻译键不存在, trans_choice 方法会简单地返回给定的键。所以,按照上面的例子,如果翻译键不存在,trans_choice 方法会返回 messages.notifications

流畅的字符串

总之, 「流畅的字符串」 很厉害,妈妈再也不用担心我对字符串操作不顺滑可读性不好而出现问题了。

after {#collection-method}

after 方法返回字符串中给定值之后的所有内容。如果字符串中不存在该值,则将返回整个字符串:

use Illuminate\Support\Str;

$slice = Str::of('This is my name')->after('This is');

// ' my name'

afterLast {#collection-method}

afterLast 方法返回字符串中最后一次出现给定值之后的所有内容。如果字符串中不存在该值,则将返回整个字符串:

use Illuminate\Support\Str;

$slice = Str::of('App\Http\Controllers\Controller')->afterLast('\\');

// 'Controller'

append {#collection-method}

append 方法将给定值附加到字符串:

use Illuminate\Support\Str;

$string = Str::of('Taylor')->append(' Otwell');

// 'Taylor Otwell'

ascii {#collection-method}

ascii 方法将尝试将字符串音译为 ASCII 值:

use Illuminate\Support\Str;

$string = Str::of('ü')->ascii();

// 'u'

basename {#collection-method}

basename 方法将返回给定字符串的结尾名称部分:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz')->basename();

// 'baz'

如果需要,可以提供一个 「扩展名」,该扩展名将从尾随的组件中删除:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz.jpg')->basename('.jpg');

// 'baz'

before {#collection-method}

before 方法返回字符串中给定值之前的所有内容:

use Illuminate\Support\Str;

$slice = Str::of('This is my name')->before('my name');

// 'This is '

beforeLast {#collection-method}

beforeLast 方法返回字符串中给定值最后一次出现之前的所有内容:

use Illuminate\Support\Str;

$slice = Str::of('This is my name')->beforeLast('is');

// 'This '

camel {#collection-method}

camel 函数将给定字符串「蛇式」转化为 camelCase「驼峰式」:

use Illuminate\Support\Str;

$converted = Str::of('foo_bar')->camel();

// fooBar

contains {#collection-method}

contains 函数判断给定的字符串是否包含给定的值(区分大小写):

use Illuminate\Support\Str;

$contains = Str::of('This is my name')->contains('my');

// true

你也可以传递一个数组形式的值来判断字符串中是否包含任何值:

use Illuminate\Support\Str;

$contains = Str::of('This is my name')->contains(['my', 'foo']);

// true

containsAll {#collection-method}

containsAll 函数判断给定的字符串中是否包含给定的数组值:

use Illuminate\Support\Str;

$containsAll = Str::of('This is my name')->containsAll(['my', 'name']);

// true

dirname {#collection-method}

dirname 方法返回给定字符串的父目录部分:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz')->dirname();

// '/foo/bar'

Optionally, You may specify how many directory levels you wish to trim from the string:
您可以指定目录级别来从字符串中获取目录:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz')->dirname(2);

// '/foo'

endsWith {#collection-method}

endsWith 函数判断指定的字符串是否以给定的值结尾:

use Illuminate\Support\Str;

$result = Str::of('This is my name')->endsWith('name');

// true

您还可以传递一个值数组来确定给定的字符串是否以任何给定的值结束:

use Illuminate\Support\Str;

$result = Str::of('This is my name')->endsWith(['name', 'foo']);

// true

$result = Str::of('This is my name')->endsWith(['this', 'foo']);

// false

exactly {#collection-method}

exactly 方法判断一个给定的字符串是与另一个字符串完全匹配:

use Illuminate\Support\Str;

$result = Str::of('Laravel')->exactly('Laravel');

// true

explode {#collection-method}

explode 方法根据给定的分隔符拆分字符串,并返回一个包含字符串每个部分的数组:

use Illuminate\Support\Str;

$collection = Str::of('foo bar baz')->explode(' ');

// ['foo', 'bar', 'baz']

finish {#collection-method}

finish 方法判断字符串末尾是否含有给定字符,如果没有则添加到字符串末尾:

use Illuminate\Support\Str;

$adjusted = Str::of('this/string')->finish('/');

// this/string/

$adjusted = Str::of('this/string/')->finish('/');

// this/string/

is {#collection-method}

is 方法判断给定字符是否和字符串匹配。* 可用来表示通配符:

use Illuminate\Support\Str;

$matches = Str::of('foobar')->is('foo*');

// true

$matches = Str::of('foobar')->is('baz*');

// false

isAscii {#collection-method}

isAscii 方法判断字符串是否是 ASCII 码:

use Illuminate\Support\Str;

$result = Str::of('Taylor')->isAscii();

// true

$result = Str::of('ü')->isAcii();

// false

isEmpty {#collection-method}

isEmpty 方法判断字符串是否为空:

use Illuminate\Support\Str;

$result = Str::of('  ')->trim()->isEmpty();

// true

$result = Str::of('Laravel')->trim()->isEmpty();

// false

kebab {#collection-method}

kebab 方法将驼峰式字符串转换为 kebab-case 式字符串:

use Illuminate\Support\Str;

$converted = Str::of('fooBar')->kebab();

// foo-bar

length {#collection-method}

length 方法返回字符串的长度:

use Illuminate\Support\Str;

$length = Str::of('Laravel')->length();

// 7

limit {#collection-method}

limit 方法根据给定的数值截取字符串:

use Illuminate\Support\Str;

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);

// The quick brown fox...

你也可以多传递一个参数追加到字符串的末尾:

use Illuminate\Support\Str;

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20, ' (...)');

// The quick brown fox (...)

lower {#collection-method}

lower 方法将字符串转换为小写:

use Illuminate\Support\Str;

$result = Str::of('LARAVEL')->lower();

// 'laravel'

match {#collection-method}

match 方法返回字符串和给定的正则表达式匹配的部分:

use Illuminate\Support\Str;

$result = Str::of('foo bar')->match('/bar/');

// 'bar'

$result = Str::of('foo bar')->match('/foo (.*)/');

// 'bar'

matchAll {#collection-method}

matchAll 方法将返回一个包含与给定正则表达式匹配的字符串的集合:

use Illuminate\Support\Str;

$result = Str::of('bar foo bar')->matchAll('/bar/');

// collect(['bar', 'bar'])

如果你在表达式中指定了一个匹配的组,Laravel 会返回该组匹配项的集合:

use Illuminate\Support\Str;

$result = Str::of('bar fun bar fly')->match('/f(\w*)/');

// collect(['un', 'ly']);

如果没有找到匹配项,则返回一个空集合。

plural {#collection-method}

plural 方法将单个字串转换为其复数形式。该功能目前只支持英文:

use Illuminate\Support\Str;

$plural = Str::of('car')->plural();

// cars

$plural = Str::of('child')->plural();

// children

你可以提供一个整数作为函数的第二个参数来检索字符串的单数或复数形式:

use Illuminate\Support\Str;

$plural = Str::of('child')->plural(2);

// children

$plural = Str::of('child')->plural(1);

// child

prepend {#collection-method}

prepend 方法将给定的值添加到字符串中:

use Illuminate\Support\Str;

$string = Str::of('Framework')->prepend('Laravel ');

// Laravel Framework

replace {#collection-method}

replace 方法替换字符串中的给定字符串:

use Illuminate\Support\Str;

$replaced = Str::of('Laravel 6.x')->replace('6.x', '7.x');

// Laravel 7.x

replaceArray {#collection-method}

replaceArray 方法使用数组顺序替换字符串中的给定值:

use Illuminate\Support\Str;

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

$replaced = Str::of($string)->replaceArray('?', ['8:30', '9:00']);

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

replaceFirst {#collection-method}

replaceFirst 方法替换字符串中给定值的第一个匹配项:

use Illuminate\Support\Str;

$replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceFirst('the', 'a');

// a quick brown fox jumps over the lazy dog

replaceLast {#collection-method}

replaceLast 方法替换字符串中给定值的最后一次出现:

use Illuminate\Support\Str;

$replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceLast('the', 'a');

// the quick brown fox jumps over a lazy dog

replaceMatches {#collection-method}

replaceMatches 函数将给定的字符串替换匹配给定模式的字符串的所有部分:

use Illuminate\Support\Str;

$replaced = Str::of('(+1) 501-555-1000')->replaceMatches('/[^A-Za-z0-9]++/', '')

// '15015551000'

replaceMatches 方法还接受一个闭包,它将与匹配给定的字符串的每个部分一起调用,从而允许您在闭包中执行替换逻辑并返回替换后的值:

use Illuminate\Support\Str;

$replaced = Str::of('123')->replaceMatches('/\d/', function ($match) {
    return '['.$match[0].']';
});

// '[1][2][3]'

start {#collection-method}

start 函数将给定值添加到给定字符串的开始位置(如果字符串尚未以给定值开始):

use Illuminate\Support\Str;

$adjusted = Str::of('this/string')->start('/');

// /this/string

$adjusted = Str::of('/this/string')->start('/');

// /this/string

upper {#collection-method}

upper 函数将给定的字符串转换为大写:

use Illuminate\Support\Str;

$adjusted = Str::of('laravel')->upper();

// LARAVEL

title {#collection-method}

title 函数将给定的字符串转换为「首字母大写」:

use Illuminate\Support\Str;

$converted = Str::of('a nice title uses the correct case')->title();

// A Nice Title Uses The Correct Case

singular {#collection-method}

singular 函数将字符串转换为单数形式。该函数目前仅支持英文:

use Illuminate\Support\Str;

$singular = Str::of('cars')->singular();

// car

$singular = Str::of('children')->singular();

// child

slug {#collection-method}

slug 函数将给定的字符串生成一个 URL 友好的 「slug」 :

use Illuminate\Support\Str;

$slug = Str::of('Laravel Framework')->slug('-');

// laravel-framework

snake {#collection-method}

snake 函数将给定的字符串转换为 snake_case「蛇式」:

use Illuminate\Support\Str;

$converted = Str::of('fooBar')->snake();

// foo_bar

startsWith {#collection-method}

startsWith 函数判断给定的字符串的开头是否是指定值:

use Illuminate\Support\Str;

$result = Str::of('This is my name')->startsWith('This');

// true

studly {#collection-method}

studly 函数将给定的字符串转换为 「变种驼峰命名」:

use Illuminate\Support\Str;

$converted = Str::of('foo_bar')->studly();

// FooBar

substr {#collection-method}

substr 函数将给定的 start 和 length 参数指定的字符串部分:

use Illuminate\Support\Str;

$string = Str::of('Laravel Framework')->substr(8);

// Framework

$string = Str::of('Laravel Framework')->substr(8, 5);

// Frame

trim {#collection-method}

trim 函数将给定的字符串去除:

use Illuminate\Support\Str;

$string = Str::of('  Laravel  ')->trim();

// 'Laravel'

$string = Str::of('/Laravel/')->trim('/');

// 'Laravel'

ucfirst {#collection-method}

ucfirst 函数将给定的字符串首字母大写:

use Illuminate\Support\Str;

$string = Str::of('foo bar')->ucfirst();

// Foo bar

whenEmpty {#collection-method}

如果字符串为空,则 whenEmpty 函数将调用给定的闭包。 如果闭包返回一个值,则 whenEmpty 函数也会返回该值。 如果闭包不返回值,则将返回字符串实例:

use Illuminate\Support\Str;

$string = Str::of('  ')->whenEmpty(function ($string) {
    return $string->trim()->prepend('Laravel');
});

// 'Laravel'

words {#collection-method}

words 函数限制字符串中的单词数:

use Illuminate\Support\Str;

$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');

// Perfectly balanced, as >>>

URLs

action() {#collection-method}

action 函数将指定的控制器动作生成一个 URL 。你不需要传递完整的控制器命名空间。只需要传递相对于 App\Http\Controllers 命名空间控制器类名称:

$url = action('HomeController@index');

$url = action([HomeController::class, 'index']);

如果该方法接受路由参数,则可以将它们作为方法的第二个参数传递:

$url = action('UserController@profile', ['id' => 1]);

asset() {#collection-method}

asset 函数使用当前请求的协议( HTTP 或 HTTPS )为资源文件生成 URL :

$url = asset('img/photo.jpg');

您可以通过 ASSET_URL.env 文件中设置变量来配置资产 URL 主机。如果你在 Amazon S3 等外部服务上托管资产,这将非常有用:

// ASSET_URL=http://example.com/assets

$url = asset('img/photo.jpg'); // http://example.com/assets/img/photo.jpg

route() {#collection-method}

route 函数将给定的命名路由生成一个 URL :

$url = route('routeName');

如果路由接受参数,则可以将它们作为方法的第二个参数传递:

$url = route('routeName', ['id' => 1]);

默认情况下, route 函数生成的是绝对 URL 。如果你想生成一个相对 URL ,你可以传递 false 作为第三个参数:

$url = route('routeName', ['id' => 1], false);

secure_asset() {#collection-method}

secure_asset 函数使用 HTTPS 协议为资源文件生成 URL:

$url = secure_asset('img/photo.jpg');

secure_url() {#collection-method}

secure_url 函数将给定的路径生成一个标准的 HTTPS URL :

$url = secure_url('user/profile');

$url = secure_url('user/profile', [1]);

url() {#collection-method}

url 函数生成给定路径的标准 URL :

$url = url('user/profile');

$url = url('user/profile', [1]);

如果没有提供路径,则返回 Illuminate\Routing\UrlGenerator 实例:

$current = url()->current();

$full = url()->full();

$previous = url()->previous();

其他

abort() {#collection-method}

abort 函数抛出 异常处理程序 所呈现的 HTTP 异常

abort(403);

你也可以提供异常响应文本和自定义响应头:

abort(403, 'Unauthorized.', $headers);

abort_if() {#collection-method}

当给定的布尔表达式的值为 true 时,abort_if 函数抛出一个 HTTP 异常:

abort_if(! Auth::user()->isAdmin(), 403);

abort 方法一样,你也可以提供异常响应文本作为第三个参数,并提供一个自定义响应头数据作为第四个参数:

abort_unless() {#collection-method}

当给定的表达式的值为 false 时,abort_unless 函数抛出一个 HTTP 异常:

abort_unless(Auth::user()->isAdmin(), 403);

和 abort 方法一样,你也可以提供异常的响应文本作为第三个参数,并提供一个自定义响应头数组作为第四个参数。

app() {#collection-method}

app 函数返回 服务容器 实例:

$container = app();

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

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

auth() {#collection-method}

auth 函数返回一个 认证 实例. 你可以使用它来替代 Auth facade:

$user = auth()->user();

如果需要,你可以指定你想要访问的认证实例:

$user = auth('admin')->user();

back() {#collection-method}

back 函数生成一个 重定向 HTTP 响应 到用户之前的位置:

return back($status = 302, $headers = [], $fallback = false);

return back();

bcrypt() {#collection-method}

bcrypt 函数 哈希 使用 Bcrypt 对给定的值进行散列。你可以使用它替代 Hash facade:

$password = bcrypt('my-secret-password');

blank() {#collection-method}

blank 函数判断给定的值是否为空:

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

// true

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

// false

如果想使用与 blank 函数相反的方法,请看 filled 函数。

broadcast() {#collection-method}

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

broadcast(new UserRegistered($user));

cache() {#collection-method}

cache 函数可以从 缓存 中获取值.如果缓存中给定的键不存在,将返回一个可选的默认值:

$value = cache('key');

$value = cache('key', 'default');

你可以通过向函数添加键值对数组来设置缓存项。与此同时,你还应该传递有效的分钟数或者缓存的持续时间来设置缓存过期时间 :

cache(['key' => 'value'], 300);

cache(['key' => 'value'], now()->addSeconds(10));

class_uses_recursive() {#collection-method}

class_uses_recursive 函数返回一个类使用的所有 traits , 包括它所有父类使用的 traits:

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

collect() {#collection-method}

collect 函数根据给定的值创建一个 collection 实例:

$collection = collect(['taylor', 'abigail']);

config() {#collection-method}

config 函数获取 configuration 变量的值。可以使用「点」语法访问配置的值,其中包括文件的名称和访问的选项,如果访问的配置选项不存在,你可以指定一个默认值并且返回这个默认值:

$value = config('app.timezone');

$value = config('app.timezone', $default);

你也可以在运行时通过传递一个键/值对数组来设置配置变量:

config(['app.debug' => true]);

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

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

csrf_field() {#collection-method}

csrf_field 函数生成一个包含 CSRF 令牌值的 HTML 输入表单字段 hidden。例如,使用 Blade 语法:

{{ csrf_field() }}

csrf_token() {#collection-method}

csrf_token 函数获取当前 CSRF 令牌的值:

$token = csrf_token();

dd() {#collection-method}

dd 函数打印输出给定的变量并且结束脚本运行:

dd($value);

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

如果你不停止执行脚本,那么可以使用 dump 函数:

decrypt() {#collection-method}

decrypt 函数可以使用 Laravel 的 加密解密机制

$decrypted = decrypt($encrypted_value);

dispatch() {#collection-method}

dispatch 函数将给定的 任务 推送到 Laravel 任务队列:

dispatch(new App\Jobs\SendEmails);

dispatch_now() {#collection-method}

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

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

dump() {#collection-method}

dump 打印给定的变量:

dump($value);

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

如果你想要在打印后停止执行脚本,可以使用 dd] 函数。

encrypt() {#collection-method}

encrypt 函数使用 Laravel 的 加解密机制 对给定的值进行加密:

$encrypted = encrypt($unencrypted_value);

env() {#collection-method}

env 函数可以获取 环境变量 配置的值或者返回默认值:

$env = env('APP_ENV');

// 返回 'production' 如果 APP_ENV 未设置的话...
$env = env('APP_ENV', 'production');

注意 如果你在部署过程中执行了 config:cache 命令 ,那么你应该确保只从配置文件中调用 env 函数.一旦配置被缓存,.env`` 文件将不再次加载,所有对env函数的调用将返回null`。

event() {#collection-method}

event 函数向监听器派发给定 事件

event(new UserRegistered($user));

factory() {#collection-method}

factory 函数根据给定的类、名称和数量创建模型工厂构造器。它能够被用于 测试数据填充:

$user = factory(App\User::class)->make();

filled() {#collection-method}

filled 函数返回是否不为「空」:

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

// true

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

// false

对于作用与 filled 相反的方法,可以查看 blank 方法。

info() {#collection-method}

info 函数将信息写入 log:

info('Some helpful information!');

可以将上下文数据数组传递给此函数:

info('User login attempt failed.', ['id' => $user->id]);

logger() {#collection-method}

logger 函数可以被用于将 debug 级别的消息写入 log:

logger('Debug message');

可以将上下文数据数组传递给此函数:

logger('User has logged in.', ['id' => $user->id]);

如果不带参数调用此函数,它将返回 logger 实例:

logger()->error('You are not allowed here.');

method_field() {#collection-method}

method_field 函数生成包含模仿表单 HTTP 动作的 HTML hidden 域。下面的例子使用了 Blade 语法:

<form method="POST">
    {{ method_field('DELETE') }}
</form>

now() {#collection-method}

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

$now = now();

old() {#collection-method}

old 函数 获取 刷入 session旧的输入值

$value = old('value');

$value = old('value', 'default');

optional() {#collection-method}

optional 函数接受任何参数,并允许你访问该对象上的属性或调用其方法。如果给定对象为 null,属性或方法将返回 null 而不是引发错误:

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

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

optional 函数也接受闭包作为其第二个参数。如果第一个参数提供的值不是 null,闭包将被调用:

return optional(User::find($id), function ($user) {
    return new DummyUser;
});

policy() {#collection-method}

policy 方法为给定的类获取 policy 实例:

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

redirect() {#collection-method}

redirect 函数返回 重定向 HTTP 响应,如果不带参数调用则返回重定向器实例:

return redirect($to = null, $status = 302, $headers = [], $secure = null);

return redirect('/home');

return redirect()->route('route.name');

report() {#collection-method}

report 函数使用 异常处理器report 方法报告异常:

report($e);

request() {#collection-method}

request 函数返回当前 请求 实例,或者获取一个输入项:

$request = request();

$value = request('key', $default);

rescue() {#collection-method}

rescue 函数执行给定的闭包,并且捕获其执行过程中引发的任何异常。捕获的所有异常都将传递给 异常处理器report 方法;然后继续处理此次请求:

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

还可以为其传递第二个参数。这个参数将作为执行闭包引发异常时的 「默认」值:

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

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

resolve() {#collection-method}

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

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

response() {#collection-method}

response 函数创建 响应 实例,或者获得响应工厂的实例:

return response('Hello World', 200, $headers);

return response()->json(['foo' => 'bar'], 200, $headers);

retry() {#collection-method}

retry 函数尝试执行给定的回调,直到达到给定的最大尝试阈值。如果回调没有抛出异常,回调返回值将被返回。如果回调抛出异常,将自动重试。达到最大尝试次数,将抛出异常:

return retry(5, function () {
    // Attempt 5 times while resting 100ms in between attempts...
}, 100);

session() {#collection-method}

session 函数用于获取或设置 session 值:

$value = session('key');

可以向该函数传递键值对数组来设置 session 值:

session(['chairs' => 7, 'instruments' => 3]);

不带参数调用此函数,则返回存储在 session 中的值:

$value = session()->get('key');

session()->put('key', $value);

tap() {#collection-method}

tap 函数接受两个参数: 任意 $value 和闭包。 $value 将被传递给闭包,并被 tap 函数返回。与闭包的返回值无关:

$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,
]);

要向类中添加 tap 方法,可以将 Illuminate\Support\Traits\Tappable 特征添加到类中。 此特征的 tap 方法接受闭包作为其唯一参数。 对象实例本身将传递给闭包,然后由 tap 方法返回:

return $user->tap(function ($user) {
    //
});

throw_if() {#collection-method}

在给定的布尔表达式结果为 true 时,throw_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() {#collection-method}

在给定的布尔表达式结果为 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'
);

today() {#collection-method}

today 函数根据当前日期创建新的 Illuminate\Support\Carbon 实例:

$today = today();

trait_uses_recursive() {#collection-method}

trait_uses_recursive 返回被 trait 使用的全部 trait

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

transform() {#collection-method}

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() {#collection-method}

validator 函数根据指定的参数创建一个新的 验证器 实例。方便起见可以用它来代替 Validator facade:

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

value() {#collection-method}

value 函数返回给定值。如果传递 闭包 给此函数,将执行 闭包 并返回闭包调用的结果:

$result = value(true);

// true

$result = value(function () {
    return false;
});

// false

view() {#collection-method}

view 函数获取一个 view 实例:

return view('auth.login');

with() {#collection-method}

with 函数返回给定的值。如果传递了一个 Closure 给第二个参数,那么会返回 Closure 执行的结果:

$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

热门教程

最新教程