辅助函数
简介
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>');
// <html>foo</html>
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()
{#collection-method}
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