Helpers
Introduction
Laravel 包含各种全局“帮助”PHP 函数。其中许多功能由框架本身使用;但是,如果您觉得方便,可以在自己的应用程序中自由使用它们。
可用方法
数组和对象
Arr::accessible Arr::add Arr::collapse Arr::crossJoin Arr::divide Arr::dot Arr::except Arr::exists Arr::first Arr::flatten Arr::forget Arr::get Arr::has Arr::hasAny Arr::isAssoc Arr::isList Arr::join Arr::keyBy Arr::last Arr::map Arr::only Arr::pluck Arr::prepend Arr::prependKeysWith Arr::pull Arr::query Arr::random Arr::set Arr::shuffle Arr::sort Arr::sortDesc Arr::sortRecursive Arr::toCssClasses Arr::undot Arr::where Arr::whereNotNull Arr::wrap data_fill data_get data_set head last
Paths
Strings
__ class_basename e preg_replace_array Str::after Str::afterLast Str::ascii Str::before Str::beforeLast Str::between Str::betweenFirst Str::camel Str::contains Str::containsAll Str::endsWith Str::excerpt Str::finish Str::headline Str::inlineMarkdown Str::is Str::isAscii Str::isJson Str::isUlid Str::isUuid Str::kebab Str::lcfirst Str::length Str::limit Str::lower Str::markdown Str::mask Str::orderedUuid Str::padBoth Str::padLeft Str::padRight Str::password Str::plural Str::pluralStudly Str::random Str::remove Str::replace Str::replaceArray Str::replaceFirst Str::replaceLast Str::reverse Str::singular Str::slug Str::snake Str::squish Str::start Str::startsWith Str::studly Str::substr Str::substrCount Str::substrReplace Str::swap Str::title Str::toHtmlString Str::ucfirst Str::ucsplit Str::upper Str::ulid Str::uuid Str::wordCount Str::words str trans trans_choice
流畅的弦乐
after afterLast append ascii basename before beforeLast between betweenFirst camel classBasename contains containsAll dirname endsWith excerpt exactly explode finish headline inlineMarkdown is isAscii isEmpty isNotEmpty isJson isUlid isUuid kebab lcfirst length limit lower ltrim markdown mask match matchAll newLine padBoth padLeft padRight pipe plural prepend remove replace replaceArray replaceFirst replaceLast replaceMatches rtrim scan singular slug snake split squish start startsWith studly substr substrReplace swap tap test title trim ucfirst ucsplit upper when whenContains whenContainsAll whenEmpty whenNotEmpty whenStartsWith whenEndsWith whenExactly whenNotExactly whenIs whenIsAscii whenIsUlid whenIsUuid whenTest wordCount words
URLs
Miscellaneous
abort abort_if abort_unless app auth back bcrypt blank broadcast cache class_uses_recursive collect config cookie csrf_field csrf_token decrypt dd dispatch dump encrypt env event fake filled info logger method_field now old optional policy redirect report report_if report_unless request rescue resolve response retry session tap throw_if throw_unless today trait_uses_recursive transform validator value view with
方法列表
数组和对象
Arr::accessible()
这Arr::accessible
方法确定给定值是否可访问数组:
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
$isAccessible = Arr::accessible(['a' => 1, 'b' => 2]);
// true
$isAccessible = Arr::accessible(new Collection);
// true
$isAccessible = Arr::accessible('abc');
// false
$isAccessible = Arr::accessible(new stdClass);
// false
Arr::add()
这Arr::add
如果给定键在数组中不存在或设置为,则方法将给定键/值对添加到数组null
:
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()
这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()
这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()
这Arr::divide
方法返回两个数组:一个包含键,另一个包含给定数组的值:
use Illuminate\Support\Arr;
[$keys, $values] = Arr::divide(['name' => 'Desk']);
// $keys: ['name']
// $values: ['Desk']
Arr::dot()
这Arr::dot
方法将多维数组展平为使用“点”符号表示深度的单级数组:
use Illuminate\Support\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
$flattened = Arr::dot($array);
// ['products.desk.price' => 100]
Arr::except()
这Arr::except
方法从数组中删除给定的键/值对:
use Illuminate\Support\Arr;
$array = ['name' => 'Desk', 'price' => 100];
$filtered = Arr::except($array, ['price']);
// ['name' => 'Desk']
Arr::exists()
这Arr::exists
方法检查给定的键是否存在于提供的数组中:
use Illuminate\Support\Arr;
$array = ['name' => 'John Doe', 'age' => 17];
$exists = Arr::exists($array, 'name');
// true
$exists = Arr::exists($array, 'salary');
// false
Arr::first()
这Arr::first
方法返回通过给定真值测试的数组的第一个元素:
use Illuminate\Support\Arr;
$array = [100, 200, 300];
$first = Arr::first($array, function (int $value, int $key) {
return $value >= 150;
});
// 200
默认值也可以作为第三个参数传递给该方法。如果没有值通过真值测试,将返回此值:
use Illuminate\Support\Arr;
$first = Arr::first($array, $callback, $default);
Arr::flatten()
这Arr::flatten
方法将多维数组展平为单级数组:
use Illuminate\Support\Arr;
$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];
$flattened = Arr::flatten($array);
// ['Joe', 'PHP', 'Ruby']
Arr::forget()
这Arr::forget
方法使用“点”表示法从深度嵌套的数组中删除给定的键/值对:
use Illuminate\Support\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
Arr::forget($array, 'products.desk');
// ['products' => []]
Arr::get()
这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()
这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::hasAny()
这Arr::hasAny
方法使用“点”表示法检查给定集合中的任何项目是否存在于数组中:
use Illuminate\Support\Arr;
$array = ['product' => ['name' => 'Desk', 'price' => 100]];
$contains = Arr::hasAny($array, 'product.name');
// true
$contains = Arr::hasAny($array, ['product.name', 'product.discount']);
// true
$contains = Arr::hasAny($array, ['category', 'product.discount']);
// false
Arr::isAssoc()
这Arr::isAssoc
方法返回true
如果给定数组是关联数组。如果一个数组没有以零开头的顺序数字键,则它被认为是“关联的”:
use Illuminate\Support\Arr;
$isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]);
// true
$isAssoc = Arr::isAssoc([1, 2, 3]);
// false
Arr::isList()
这Arr::isList
方法返回true
如果给定数组的键是从零开始的连续整数:
use Illuminate\Support\Arr;
$isList = Arr::isList(['foo', 'bar', 'baz']);
// true
$isList = Arr::isList(['product' => ['name' => 'Desk', 'price' => 100]]);
// false
Arr::join()
这Arr::join
方法将数组元素与字符串连接起来。使用此方法的第二个参数,您还可以为数组的最后一个元素指定连接字符串:
use Illuminate\Support\Arr;
$array = ['Tailwind', 'Alpine', 'Laravel', 'Livewire'];
$joined = Arr::join($array, ', ');
// Tailwind, Alpine, Laravel, Livewire
$joined = Arr::join($array, ', ', ' and ');
// Tailwind, Alpine, Laravel and Livewire
Arr::keyBy()
这Arr::keyBy
方法通过给定的键对数组进行键控。如果多个项目具有相同的键,则只有最后一个项目会出现在新数组中:
use Illuminate\Support\Arr;
$array = [
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
];
$keyed = Arr::keyBy($array, 'product_id');
/*
[
'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]
*/
Arr::last()
这Arr::last
方法返回通过给定真值测试的数组的最后一个元素:
use Illuminate\Support\Arr;
$array = [100, 200, 300, 110];
$last = Arr::last($array, function (int $value, int $key) {
return $value >= 150;
});
// 300
默认值可以作为第三个参数传递给该方法。如果没有值通过真值测试,将返回此值:
use Illuminate\Support\Arr;
$last = Arr::last($array, $callback, $default);
Arr::map()
这Arr::map
方法遍历数组并将每个值和键传递给给定的回调。数组值被回调返回的值替换:
use Illuminate\Support\Arr;
$array = ['first' => 'james', 'last' => 'kirk'];
$mapped = Arr::map($array, function (string $value, string $key) {
return ucfirst($value);
});
// ['first' => 'James', 'last' => 'Kirk']
Arr::only()
这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()
这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()
这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::prependKeysWith()
这Arr::prependKeysWith
用给定的前缀为关联数组的所有键名添加前缀:
use Illuminate\Support\Arr;
$array = [
'name' => 'Desk',
'price' => 100,
];
$keyed = Arr::prependKeysWith($array, 'product.');
/*
[
'product.name' => 'Desk',
'product.price' => 100,
]
*/
Arr::pull()
这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::query()
这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::random()
这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::set()
这Arr::set
方法使用“点”表示法在深度嵌套的数组中设置一个值:
use Illuminate\Support\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
Arr::set($array, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 200]]]
Arr::shuffle()
这Arr::shuffle
方法随机打乱数组中的项目:
use Illuminate\Support\Arr;
$array = Arr::shuffle([1, 2, 3, 4, 5]);
// [3, 2, 5, 1, 4] - (generated randomly)
Arr::sort()
这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 (array $value) {
return $value['name'];
}));
/*
[
['name' => 'Chair'],
['name' => 'Desk'],
['name' => 'Table'],
]
*/
Arr::sortDesc()
这Arr::sortDesc
方法按值降序对数组进行排序:
use Illuminate\Support\Arr;
$array = ['Desk', 'Table', 'Chair'];
$sorted = Arr::sortDesc($array);
// ['Table', 'Desk', 'Chair']
您还可以根据给定闭包的结果对数组进行排序:
use Illuminate\Support\Arr;
$array = [
['name' => 'Desk'],
['name' => 'Table'],
['name' => 'Chair'],
];
$sorted = array_values(Arr::sortDesc($array, function (array $value) {
return $value['name'];
}));
/*
[
['name' => 'Table'],
['name' => 'Desk'],
['name' => 'Chair'],
]
*/
Arr::sortRecursive()
这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::toCssClasses()
这Arr::toCssClasses
有条件地编译 CSS 类字符串。该方法接受一个类数组,其中数组键包含您要添加的一个或多个类,而值是一个布尔表达式。如果数组元素有数字键,它将始终包含在呈现的类列表中:
use Illuminate\Support\Arr;
$isActive = false;
$hasError = true;
$array = ['p-4', 'font-bold' => $isActive, 'bg-red' => $hasError];
$classes = Arr::toCssClasses($array);
/*
'p-4 bg-red'
*/
这个方法支持 Laravel 的功能,允许将类与 Blade 组件的属性包合并 以及@class
刀片指令.
Arr::undot()
这Arr::undot
方法将使用“点”表示法的一维数组扩展为多维数组:
use Illuminate\Support\Arr;
$array = [
'user.name' => 'Kevin Malone',
'user.occupation' => 'Accountant',
];
$array = Arr::undot($array);
// ['user' => ['name' => 'Kevin Malone', 'occupation' => 'Accountant']]
Arr::where()
这Arr::where
方法使用给定的闭包过滤数组:
use Illuminate\Support\Arr;
$array = [100, '200', 300, '400', 500];
$filtered = Arr::where($array, function (string|int $value, int $key) {
return is_string($value);
});
// [1 => '200', 3 => '400']
Arr::whereNotNull()
这Arr::whereNotNull
方法删除所有null
来自给定数组的值:
use Illuminate\Support\Arr;
$array = [0, null];
$filtered = Arr::whereNotNull($array);
// [0 => 0]
Arr::wrap()
这Arr::wrap
方法将给定值包装在数组中。如果给定的值已经是一个数组,它将不加修改地返回:
use Illuminate\Support\Arr;
$string = 'Laravel';
$array = Arr::wrap($string);
// ['Laravel']
如果给定值是null
,将返回一个空数组:
use Illuminate\Support\Arr;
$array = Arr::wrap(null);
// []
data_fill()
这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_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()
这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, overwrite: false);
// ['products' => ['desk' => ['price' => 100]]]
head()
这head
函数返回给定数组中的第一个元素:
$array = [100, 200, 300];
$first = head($array);
// 100
last()
这last
函数返回给定数组中的最后一个元素:
$array = [100, 200, 300];
$last = last($array);
// 300
Paths
app_path()
这app_path
函数返回应用程序的完全限定路径app
目录。您也可以使用app_path
函数生成相对于应用程序目录的文件的完全限定路径:
$path = app_path();
$path = app_path('Http/Controllers/Controller.php');
base_path()
这base_path
函数返回应用程序根目录的完全限定路径。您也可以使用base_path
函数生成相对于项目根目录的给定文件的完全限定路径:
$path = base_path();
$path = base_path('vendor/bin');
config_path()
这config_path
函数返回应用程序的完全限定路径config
目录。您也可以使用config_path
函数生成应用程序配置目录中给定文件的完全限定路径:
$path = config_path();
$path = config_path('app.php');
database_path()
这database_path
函数返回应用程序的完全限定路径database
目录。您也可以使用database_path
函数生成数据库目录中给定文件的完全限定路径:
$path = database_path();
$path = database_path('factories/UserFactory.php');
lang_path()
这lang_path
函数返回应用程序的完全限定路径lang
目录。您也可以使用lang_path
函数生成目录中给定文件的完全限定路径:
$path = lang_path();
$path = lang_path('en/messages.php');
Note 默认情况下,Laravel 应用程序框架不包括
lang
目录。如果你想自定义 Laravel 的语言文件,你可以通过lang:publish
工匠命令。
mix()
这mix
函数返回一个路径版本化的 Mix 文件:
$path = mix('css/app.css');
public_path()
这public_path
函数返回应用程序的完全限定路径public
目录。您也可以使用public_path
函数生成公共目录中给定文件的完全限定路径:
$path = public_path();
$path = public_path('css/app.css');
resource_path()
这resource_path
函数返回应用程序的完全限定路径resources
目录。您也可以使用resource_path
函数生成资源目录中给定文件的完全限定路径:
$path = resource_path();
$path = resource_path('sass/app.scss');
storage_path()
这storage_path
函数返回应用程序的完全限定路径storage
目录。您也可以使用storage_path
函数生成存储目录中给定文件的完全限定路径:
$path = storage_path();
$path = storage_path('app/file.txt');
Strings
__()
这__
函数使用您的翻译给定的翻译字符串或翻译键语言文件:
echo __('Welcome to our application');
echo __('messages.welcome');
如果指定的翻译字符串或键不存在,则__
函数将返回给定的值。所以,使用上面的例子,__
函数会返回messages.welcome
如果该翻译键不存在。
class_basename()
这class_basename
函数返回给定类的类名,删除了类的命名空间:
$class = class_basename('Foo\Bar\Baz');
// Baz
e()
这e
函数运行 PHP 的htmlspecialchars
功能与double_encode
选项设置为true
默认情况下:
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::ascii()
这Str::ascii
方法将尝试将字符串音译为 ASCII 值:
use Illuminate\Support\Str;
$slice = Str::ascii('û');
// 'u'
Str::before()
这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::between()
这Str::between
方法返回两个值之间的字符串部分:
use Illuminate\Support\Str;
$slice = Str::between('This is my name', 'This', 'name');
// ' is my '
Str::betweenFirst()
这Str::betweenFirst
方法返回两个值之间字符串的最小可能部分:
use Illuminate\Support\Str;
$slice = Str::betweenFirst('[a] bc [d]', '[', ']');
// 'a'
Str::camel()
这Str::camel
方法将给定的字符串转换为camelCase
:
use Illuminate\Support\Str;
$converted = Str::camel('foo_bar');
// fooBar
Str::contains()
这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()
这Str::containsAll
方法确定给定字符串是否包含给定数组中的所有值:
use Illuminate\Support\Str;
$containsAll = Str::containsAll('This is my name', ['my', 'name']);
// true
Str::endsWith()
这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::excerpt()
这Str::excerpt
方法从给定字符串中提取与该字符串中短语的第一个实例匹配的摘录:
use Illuminate\Support\Str;
$excerpt = Str::excerpt('This is my name', 'my', [
'radius' => 3
]);
// '...is my na...'
这radius
选项,默认为100
, 允许您定义应出现在截断字符串每一侧的字符数。
此外,您可以使用omission
选项来定义将被添加到截断字符串之前和附加的字符串:
use Illuminate\Support\Str;
$excerpt = Str::excerpt('This is my name', 'name', [
'radius' => 3,
'omission' => '(...) '
]);
// '(...) my name'
Str::finish()
这Str::finish
方法将给定值的单个实例添加到字符串(如果它尚未以该值结尾):
use Illuminate\Support\Str;
$adjusted = Str::finish('this/string', '/');
// this/string/
$adjusted = Str::finish('this/string/', '/');
// this/string/
Str::headline()
这Str::headline
方法会将由大小写、连字符或下划线分隔的字符串转换为空格分隔的字符串,每个单词的第一个字母大写:
use Illuminate\Support\Str;
$headline = Str::headline('steve_jobs');
// Steve Jobs
$headline = Str::headline('EmailNotificationSent');
// Email Notification Sent
Str::inlineMarkdown()
这Str::inlineMarkdown
方法将 GitHub 风格的 Markdown 转换为内联 HTML,使用CommonMark.然而,不同于markdown
方法,它不会将所有生成的 HTML 包装在块级元素中:
use Illuminate\Support\Str;
$html = Str::inlineMarkdown('**Laravel**');
// <strong>Laravel</strong>
Str::is()
这Str::is
方法确定给定字符串是否与给定模式匹配。星号可用作通配符值:
use Illuminate\Support\Str;
$matches = Str::is('foo*', 'foobar');
// true
$matches = Str::is('baz*', 'foobar');
// false
Str::isAscii()
这Str::isAscii
方法确定给定字符串是否为 7 位 ASCII:
use Illuminate\Support\Str;
$isAscii = Str::isAscii('Taylor');
// true
$isAscii = Str::isAscii('ü');
// false
Str::isJson()
这Str::isJson
方法确定给定的字符串是否是有效的 JSON:
use Illuminate\Support\Str;
$result = Str::isJson('[1,2,3]');
// true
$result = Str::isJson('{"first": "John", "last": "Doe"}');
// true
$result = Str::isJson('{first: "John", last: "Doe"}');
// false
Str::isUlid()
这Str::isUlid
方法确定给定的字符串是否是有效的 ULID:
use Illuminate\Support\Str;
$isUlid = Str::isUlid('01gd6r360bp37zj17nxb55yv40');
// true
$isUlid = Str::isUlid('laravel');
// false
Str::isUuid()
这Str::isUuid
方法确定给定的字符串是否是有效的 UUID:
use Illuminate\Support\Str;
$isUuid = Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de');
// true
$isUuid = Str::isUuid('laravel');
// false
Str::kebab()
这Str::kebab
方法将给定的字符串转换为kebab-case
:
use Illuminate\Support\Str;
$converted = Str::kebab('fooBar');
// foo-bar
Str::lcfirst()
这Str::lcfirst
方法返回第一个字符小写的给定字符串:
use Illuminate\Support\Str;
$string = Str::lcfirst('Foo Bar');
// foo Bar
Str::length()
这Str::length
方法返回给定字符串的长度:
use Illuminate\Support\Str;
$length = Str::length('Laravel');
// 7
Str::limit()
这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::lower()
这Str::lower
方法将给定的字符串转换为小写:
use Illuminate\Support\Str;
$converted = Str::lower('LARAVEL');
// laravel
Str::markdown()
这Str::markdown
方法使用 GitHub 风格的 Markdown 转换成 HTMLCommonMark:
use Illuminate\Support\Str;
$html = Str::markdown('# Laravel');
// <h1>Laravel</h1>
$html = Str::markdown('# Taylor <b>Otwell</b>', [
'html_input' => 'strip',
]);
// <h1>Taylor Otwell</h1>
Str::mask()
这Str::mask
方法用重复字符屏蔽部分字符串,可用于混淆字符串段,例如电子邮件地址和电话号码:
use Illuminate\Support\Str;
$string = Str::mask('taylor@example.com', '*', 3);
// tay***************
如果需要,您可以提供一个负数作为第三个参数mask
方法,它将指示该方法在距离字符串末尾的给定距离处开始屏蔽:
$string = Str::mask('taylor@example.com', '*', -15, 3);
// tay***@example.com
Str::orderedUuid()
这Str::orderedUuid
方法生成一个“时间戳优先”的 UUID,该 UUID 可以有效地存储在索引数据库列中。使用此方法生成的每个 UUID 将排在先前使用此方法生成的 UUID 之后:
use Illuminate\Support\Str;
return (string) Str::orderedUuid();
Str::padBoth()
这Str::padBoth
方法包装 PHP 的str_pad
函数,用另一个字符串填充字符串的两边,直到最终字符串达到所需的长度:
use Illuminate\Support\Str;
$padded = Str::padBoth('James', 10, '_');
// '__James___'
$padded = Str::padBoth('James', 10);
// ' James '
Str::padLeft()
这Str::padLeft
方法包装 PHP 的str_pad
函数,用另一个字符串填充字符串的左侧,直到最终字符串达到所需的长度:
use Illuminate\Support\Str;
$padded = Str::padLeft('James', 10, '-=');
// '-=-=-James'
$padded = Str::padLeft('James', 10);
// ' James'
Str::padRight()
这Str::padRight
方法包装 PHP 的str_pad
函数,用另一个字符串填充字符串的右侧,直到最终字符串达到所需的长度:
use Illuminate\Support\Str;
$padded = Str::padRight('James', 10, '-');
// 'James-----'
$padded = Str::padRight('James', 10);
// 'James '
Str::password()
这Str::password
方法可用于生成给定长度的安全随机密码。密码将由字母、数字、符号和空格的组合组成。默认情况下,密码长度为 32 个字符:
use Illuminate\Support\Str;
$password = Str::password();
// 'EbJo2vE-AS:U,$%_gkrV4n,q~1xy/-_4'
$password = Str::password(12);
// 'qwuar>#V|i]N'
Str::plural()
这Str::plural
方法将单数字符串转换为其复数形式。该功能支持Laravel 的复数支持的任何语言:
use Illuminate\Support\Str;
$plural = Str::plural('car');
// cars
$plural = Str::plural('child');
// children
您可以提供一个整数作为函数的第二个参数来检索字符串的单数或复数形式:
use Illuminate\Support\Str;
$plural = Str::plural('child', 2);
// children
$singular = Str::plural('child', 1);
// child
Str::pluralStudly()
这Str::pluralStudly
方法将以大写形式格式化的单数字符串转换为其复数形式。该功能支持Laravel 的复数支持的任何语言:
use Illuminate\Support\Str;
$plural = Str::pluralStudly('VerifiedHuman');
// VerifiedHumans
$plural = Str::pluralStudly('UserFeedback');
// UserFeedback
您可以提供一个整数作为函数的第二个参数来检索字符串的单数或复数形式:
use Illuminate\Support\Str;
$plural = Str::pluralStudly('VerifiedHuman', 2);
// VerifiedHumans
$singular = Str::pluralStudly('VerifiedHuman', 1);
// VerifiedHuman
Str::random()
这Str::random
方法生成指定长度的随机字符串。这个函数使用 PHP 的random_bytes
功能:
use Illuminate\Support\Str;
$random = Str::random(40);
Str::remove()
这Str::remove
方法从字符串中删除给定的值或值数组:
use Illuminate\Support\Str;
$string = 'Peter Piper picked a peck of pickled peppers.';
$removed = Str::remove('e', $string);
// Ptr Pipr pickd a pck of pickld ppprs.
你也可以通过false
作为第三个论点remove
删除字符串时忽略大小写的方法。
Str::replace()
这Str::replace
方法替换字符串中的给定字符串:
use Illuminate\Support\Str;
$string = 'Laravel 8.x';
$replaced = Str::replace('8.x', '9.x', $string);
// Laravel 9.x
Str::replaceArray()
这Str::replaceArray
方法使用数组顺序替换字符串中的给定值:
use Illuminate\Support\Str;
$string = 'The event will take place between ? and ?';
$replaced = Str::replaceArray('?', ['8:30', '9:00'], $string);
// The event will take place between 8:30 and 9:00
Str::replaceFirst()
这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()
这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::reverse()
这Str::reverse
方法反转给定的字符串:
use Illuminate\Support\Str;
$reversed = Str::reverse('Hello World');
// dlroW olleH
Str::singular()
这Str::singular
方法将字符串转换为其单数形式。该功能支持Laravel 的复数支持的任何语言:
use Illuminate\Support\Str;
$singular = Str::singular('cars');
// car
$singular = Str::singular('children');
// child
Str::slug()
这Str::slug
方法从给定的字符串生成一个 URL 友好的“slug”:
use Illuminate\Support\Str;
$slug = Str::slug('Laravel 5 Framework', '-');
// laravel-5-framework
Str::snake()
这Str::snake
方法将给定的字符串转换为snake_case
:
use Illuminate\Support\Str;
$converted = Str::snake('fooBar');
// foo_bar
$converted = Str::snake('fooBar', '-');
// foo-bar
Str::squish()
这Str::squish
方法从字符串中删除所有无关的空格,包括单词之间的无关空格:
use Illuminate\Support\Str;
$string = Str::squish(' laravel framework ');
// laravel framework
Str::start()
这Str::start
方法将给定值的单个实例添加到字符串(如果它尚未以该值开头):
use Illuminate\Support\Str;
$adjusted = Str::start('this/string', '/');
// /this/string
$adjusted = Str::start('/this/string', '/');
// /this/string
Str::startsWith()
这Str::startsWith
方法确定给定字符串是否以给定值开头:
use Illuminate\Support\Str;
$result = Str::startsWith('This is my name', 'This');
// true
如果传递了一组可能的值,则startsWith
方法将返回true
如果字符串以任何给定值开头:
$result = Str::startsWith('This is my name', ['This', 'That', 'There']);
// true
Str::studly()
这Str::studly
方法将给定的字符串转换为StudlyCase
:
use Illuminate\Support\Str;
$converted = Str::studly('foo_bar');
// FooBar
Str::substr()
这Str::substr
方法返回由 start 和 length 参数指定的字符串部分:
use Illuminate\Support\Str;
$converted = Str::substr('The Laravel Framework', 4, 7);
// Laravel
Str::substrCount()
这Str::substrCount
方法返回给定字符串中给定值的出现次数:
use Illuminate\Support\Str;
$count = Str::substrCount('If you like ice cream, you will like snow cones.', 'like');
// 2
Str::substrReplace()
这Str::substrReplace
方法替换字符串一部分中的文本,从第三个参数指定的位置开始,替换第四个参数指定的字符数。通过0
方法的第四个参数将在指定位置插入字符串,而不替换字符串中的任何现有字符:
use Illuminate\Support\Str;
$result = Str::substrReplace('1300', ':', 2);
// 13:
$result = Str::substrReplace('1300', ':', 2, 0);
// 13:00
Str::swap()
这Str::swap
方法使用 PHP 替换给定字符串中的多个值strtr
功能:
use Illuminate\Support\Str;
$string = Str::swap([
'Tacos' => 'Burritos',
'great' => 'fantastic',
], 'Tacos are great!');
// Burritos are fantastic!
Str::title()
这Str::title
方法将给定的字符串转换为Title Case
:
use Illuminate\Support\Str;
$converted = Str::title('a nice title uses the correct case');
// A Nice Title Uses The Correct Case
Str::toHtmlString()
这Str::toHtmlString
方法将字符串实例转换为Illuminate\Support\HtmlString
,可能会显示在 Blade 模板中:
use Illuminate\Support\Str;
$htmlString = Str::of('Nuno Maduro')->toHtmlString();
Str::ucfirst()
这Str::ucfirst
方法返回第一个字符大写的给定字符串:
use Illuminate\Support\Str;
$string = Str::ucfirst('foo bar');
// Foo bar
Str::ucsplit()
这Str::ucsplit
方法将给定的字符串按大写字符拆分为数组:
use Illuminate\Support\Str;
$segments = Str::ucsplit('FooBar');
// [0 => 'Foo', 1 => 'Bar']
Str::upper()
这Str::upper
方法将给定的字符串转换为大写:
use Illuminate\Support\Str;
$string = Str::upper('laravel');
// LARAVEL
Str::ulid()
这Str::ulid
方法生成一个 ULID:
use Illuminate\Support\Str;
return (string) Str::ulid();
// 01gd6r360bp37zj17nxb55yv40
Str::uuid()
这Str::uuid
方法生成一个 UUID(版本 4):
use Illuminate\Support\Str;
return (string) Str::uuid();
Str::wordCount()
这Str::wordCount
方法返回字符串包含的单词数:
use Illuminate\Support\Str;
Str::wordCount('Hello, world!'); // 2
Str::words()
这Str::words
方法限制字符串中的单词数。可以通过其第三个参数将附加字符串传递给此方法,以指定应将哪个字符串附加到截断字符串的末尾:
use Illuminate\Support\Str;
return Str::words('Perfectly balanced, as all things should be.', 3, ' >>>');
// Perfectly balanced, as >>>
str()
这str
函数返回一个新的Illuminate\Support\Stringable
给定字符串的实例。这个函数等同于Str::of
方法:
$string = str('Taylor')->append(' Otwell');
// 'Taylor Otwell'
如果没有向str
函数,该函数返回一个实例Illuminate\Support\Str
:
$snake = str()->snake('FooBar');
// 'foo_bar'
trans()
这trans
函数使用您的翻译键翻译给定的翻译键语言文件:
echo trans('messages.welcome');
如果指定的翻译键不存在,则trans
函数将返回给定的键。所以,使用上面的例子,trans
函数会返回messages.welcome
如果翻译键不存在。
trans_choice()
这trans_choice
函数用词形变化翻译给定的翻译键:
echo trans_choice('messages.notifications', $unreadCount);
如果指定的翻译键不存在,则trans_choice
函数将返回给定的键。所以,使用上面的例子,trans_choice
函数会返回messages.notifications
如果翻译键不存在。
流畅的弦乐
Fluent strings 提供了一个更流畅的、面向对象的接口来处理字符串值,与传统的字符串操作相比,允许您使用更易读的语法将多个字符串操作链接在一起。
after
这after
方法返回字符串中给定值之后的所有内容。如果字符串中不存在该值,则将返回整个字符串:
use Illuminate\Support\Str;
$slice = Str::of('This is my name')->after('This is');
// ' my name'
afterLast
这afterLast
方法返回字符串中最后一次出现给定值之后的所有内容。如果字符串中不存在该值,则将返回整个字符串:
use Illuminate\Support\Str;
$slice = Str::of('App\Http\Controllers\Controller')->afterLast('\\');
// 'Controller'
append
这append
方法将给定值附加到字符串:
use Illuminate\Support\Str;
$string = Str::of('Taylor')->append(' Otwell');
// 'Taylor Otwell'
ascii
这ascii
方法将尝试将字符串音译为 ASCII 值:
use Illuminate\Support\Str;
$string = Str::of('ü')->ascii();
// 'u'
basename
这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
这before
方法返回字符串中给定值之前的所有内容:
use Illuminate\Support\Str;
$slice = Str::of('This is my name')->before('my name');
// 'This is '
beforeLast
这beforeLast
方法返回字符串中最后一次出现给定值之前的所有内容:
use Illuminate\Support\Str;
$slice = Str::of('This is my name')->beforeLast('is');
// 'This '
between
这between
方法返回两个值之间的字符串部分:
use Illuminate\Support\Str;
$converted = Str::of('This is my name')->between('This', 'name');
// ' is my '
betweenFirst
这betweenFirst
方法返回两个值之间字符串的最小可能部分:
use Illuminate\Support\Str;
$converted = Str::of('[a] bc [d]')->betweenFirst('[', ']');
// 'a'
camel
这camel
方法将给定的字符串转换为camelCase
:
use Illuminate\Support\Str;
$converted = Str::of('foo_bar')->camel();
// fooBar
classBasename
这classBasename
方法返回给定类的类名,删除了类的命名空间:
use Illuminate\Support\Str;
$class = Str::of('Foo\Bar\Baz')->classBasename();
// Baz
contains
这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
这containsAll
方法确定给定字符串是否包含给定数组中的所有值:
use Illuminate\Support\Str;
$containsAll = Str::of('This is my name')->containsAll(['my', 'name']);
// true
dirname
这dirname
方法返回给定字符串的父目录部分:
use Illuminate\Support\Str;
$string = Str::of('/foo/bar/baz')->dirname();
// '/foo/bar'
如有必要,您可以指定要从字符串中删除多少目录级别:
use Illuminate\Support\Str;
$string = Str::of('/foo/bar/baz')->dirname(2);
// '/foo'
excerpt
这excerpt
方法从字符串中提取与该字符串中短语的第一个实例匹配的摘录:
use Illuminate\Support\Str;
$excerpt = Str::of('This is my name')->excerpt('my', [
'radius' => 3
]);
// '...is my na...'
这radius
选项,默认为100
, 允许您定义应出现在截断字符串每一侧的字符数。
此外,您可以使用omission
更改将添加到截断字符串之前和附加的字符串的选项:
use Illuminate\Support\Str;
$excerpt = Str::of('This is my name')->excerpt('name', [
'radius' => 3,
'omission' => '(...) '
]);
// '(...) my name'
endsWith
这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
这exactly
方法确定给定的字符串是否与另一个字符串完全匹配:
use Illuminate\Support\Str;
$result = Str::of('Laravel')->exactly('Laravel');
// true
explode
这explode
方法按给定的分隔符拆分字符串并返回包含拆分字符串的每个部分的集合:
use Illuminate\Support\Str;
$collection = Str::of('foo bar baz')->explode(' ');
// collect(['foo', 'bar', 'baz'])
finish
这finish
方法将给定值的单个实例添加到字符串(如果它尚未以该值结尾):
use Illuminate\Support\Str;
$adjusted = Str::of('this/string')->finish('/');
// this/string/
$adjusted = Str::of('this/string/')->finish('/');
// this/string/
headline
这headline
方法会将由大小写、连字符或下划线分隔的字符串转换为空格分隔的字符串,每个单词的第一个字母大写:
use Illuminate\Support\Str;
$headline = Str::of('taylor_otwell')->headline();
// Taylor Otwell
$headline = Str::of('EmailNotificationSent')->headline();
// Email Notification Sent
inlineMarkdown
这inlineMarkdown
方法将 GitHub 风格的 Markdown 转换为内联 HTML,使用CommonMark.然而,不同于markdown
方法,它不会将所有生成的 HTML 包装在块级元素中:
use Illuminate\Support\Str;
$html = Str::of('**Laravel**')->inlineMarkdown();
// <strong>Laravel</strong>
is
这is
方法确定给定字符串是否与给定模式匹配。星号可用作通配符值
use Illuminate\Support\Str;
$matches = Str::of('foobar')->is('foo*');
// true
$matches = Str::of('foobar')->is('baz*');
// false
isAscii
这isAscii
方法确定给定字符串是否为 ASCII 字符串:
use Illuminate\Support\Str;
$result = Str::of('Taylor')->isAscii();
// true
$result = Str::of('ü')->isAscii();
// false
isEmpty
这isEmpty
方法确定给定的字符串是否为空:
use Illuminate\Support\Str;
$result = Str::of(' ')->trim()->isEmpty();
// true
$result = Str::of('Laravel')->trim()->isEmpty();
// false
isNotEmpty
这isNotEmpty
方法确定给定的字符串是否不为空:
use Illuminate\Support\Str;
$result = Str::of(' ')->trim()->isNotEmpty();
// false
$result = Str::of('Laravel')->trim()->isNotEmpty();
// true
isJson
这isJson
方法确定给定的字符串是否是有效的 JSON:
use Illuminate\Support\Str;
$result = Str::of('[1,2,3]')->isJson();
// true
$result = Str::of('{"first": "John", "last": "Doe"}')->isJson();
// true
$result = Str::of('{first: "John", last: "Doe"}')->isJson();
// false
isUlid
这isUlid
方法确定给定字符串是否为 ULID:
use Illuminate\Support\Str;
$result = Str::of('01gd6r360bp37zj17nxb55yv40')->isUlid();
// true
$result = Str::of('Taylor')->isUlid();
// false
isUuid
这isUuid
方法确定给定字符串是否为 UUID:
use Illuminate\Support\Str;
$result = Str::of('5ace9ab9-e9cf-4ec6-a19d-5881212a452c')->isUuid();
// true
$result = Str::of('Taylor')->isUuid();
// false
kebab
这kebab
方法将给定的字符串转换为kebab-case
:
use Illuminate\Support\Str;
$converted = Str::of('fooBar')->kebab();
// foo-bar
lcfirst
这lcfirst
方法返回第一个字符小写的给定字符串:
use Illuminate\Support\Str;
$string = Str::of('Foo Bar')->lcfirst();
// foo Bar
length
这length
方法返回给定字符串的长度:
use Illuminate\Support\Str;
$length = Str::of('Laravel')->length();
// 7
limit
这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
这lower
方法将给定的字符串转换为小写:
use Illuminate\Support\Str;
$result = Str::of('LARAVEL')->lower();
// 'laravel'
ltrim
这ltrim
方法修剪字符串的左侧:
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->ltrim();
// 'Laravel '
$string = Str::of('/Laravel/')->ltrim('/');
// 'Laravel/'
markdown
这markdown
方法将 GitHub 风格的 Markdown 转换为 HTML:
use Illuminate\Support\Str;
$html = Str::of('# Laravel')->markdown();
// <h1>Laravel</h1>
$html = Str::of('# Taylor <b>Otwell</b>')->markdown([
'html_input' => 'strip',
]);
// <h1>Taylor Otwell</h1>
mask
这mask
方法用重复字符屏蔽部分字符串,可用于混淆字符串段,例如电子邮件地址和电话号码:
use Illuminate\Support\Str;
$string = Str::of('taylor@example.com')->mask('*', 3);
// tay***************
如果需要,您可以提供负数作为第三个或第四个参数mask
方法,它将指示该方法在距离字符串末尾的给定距离处开始屏蔽:
$string = Str::of('taylor@example.com')->mask('*', -15, 3);
// tay***@example.com
$string = Str::of('taylor@example.com')->mask('*', 4, -4);
// tayl**********.com
match
这match
方法将返回与给定正则表达式模式匹配的字符串部分:
use Illuminate\Support\Str;
$result = Str::of('foo bar')->match('/bar/');
// 'bar'
$result = Str::of('foo bar')->match('/foo (.*)/');
// 'bar'
matchAll
这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')->matchAll('/f(\w*)/');
// collect(['un', 'ly']);
如果未找到匹配项,将返回一个空集合。
newLine
这newLine
方法将“行尾”字符附加到字符串:
use Illuminate\Support\Str;
$padded = Str::of('Laravel')->newLine()->append('Framework');
// 'Laravel
// Framework'
padBoth
这padBoth
方法包装 PHP 的str_pad
函数,用另一个字符串填充字符串的两边,直到最终字符串达到所需的长度:
use Illuminate\Support\Str;
$padded = Str::of('James')->padBoth(10, '_');
// '__James___'
$padded = Str::of('James')->padBoth(10);
// ' James '
padLeft
这padLeft
方法包装 PHP 的str_pad
函数,用另一个字符串填充字符串的左侧,直到最终字符串达到所需的长度:
use Illuminate\Support\Str;
$padded = Str::of('James')->padLeft(10, '-=');
// '-=-=-James'
$padded = Str::of('James')->padLeft(10);
// ' James'
padRight
这padRight
方法包装 PHP 的str_pad
函数,用另一个字符串填充字符串的右侧,直到最终字符串达到所需的长度:
use Illuminate\Support\Str;
$padded = Str::of('James')->padRight(10, '-');
// 'James-----'
$padded = Str::of('James')->padRight(10);
// 'James '
pipe
这pipe
方法允许您通过将字符串的当前值传递给给定的可调用对象来转换字符串:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$hash = Str::of('Laravel')->pipe('md5')->prepend('Checksum: ');
// 'Checksum: a5c95b86291ea299fcbe64458ed12702'
$closure = Str::of('foo')->pipe(function (Stringable $str) {
return 'bar';
});
// 'bar'
plural
这plural
方法将单数字符串转换为其复数形式。该功能支持Laravel 的复数支持的任何语言:
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
这prepend
方法将给定值添加到字符串中:
use Illuminate\Support\Str;
$string = Str::of('Framework')->prepend('Laravel ');
// Laravel Framework
remove
这remove
方法从字符串中删除给定的值或值数组:
use Illuminate\Support\Str;
$string = Str::of('Arkansas is quite beautiful!')->remove('quite');
// Arkansas is beautiful!
你也可以通过false
作为删除字符串时忽略大小写的第二个参数。
replace
这replace
方法替换字符串中的给定字符串:
use Illuminate\Support\Str;
$replaced = Str::of('Laravel 6.x')->replace('6.x', '7.x');
// Laravel 7.x
replaceArray
这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
这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
这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
这replaceMatches
方法用给定的替换字符串替换与模式匹配的字符串的所有部分:
use Illuminate\Support\Str;
$replaced = Str::of('(+1) 501-555-1000')->replaceMatches('/[^A-Za-z0-9]++/', '')
// '15015551000'
这replaceMatches
方法还接受一个闭包,该闭包将被与给定模式匹配的字符串的每个部分调用,允许您在闭包内执行替换逻辑并返回替换值:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$replaced = Str::of('123')->replaceMatches('/\d/', function (Stringable $match) {
return '['.$match[0].']';
});
// '[1][2][3]'
rtrim
这rtrim
方法修剪给定字符串的右侧:
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->rtrim();
// ' Laravel'
$string = Str::of('/Laravel/')->rtrim('/');
// '/Laravel'
scan
这scan
方法根据所支持的格式将字符串的输入解析为集合sscanf
函数:
use Illuminate\Support\Str;
$collection = Str::of('filename.jpg')->scan('%[^.].%s');
// collect(['filename', 'jpg'])
singular
这singular
方法将字符串转换为其单数形式。该功能支持Laravel 的复数支持的任何语言:
use Illuminate\Support\Str;
$singular = Str::of('cars')->singular();
// car
$singular = Str::of('children')->singular();
// child
slug
这slug
方法从给定的字符串生成一个 URL 友好的“slug”:
use Illuminate\Support\Str;
$slug = Str::of('Laravel Framework')->slug('-');
// laravel-framework
snake
这snake
方法将给定的字符串转换为snake_case
:
use Illuminate\Support\Str;
$converted = Str::of('fooBar')->snake();
// foo_bar
split
这split
方法使用正则表达式将字符串拆分为集合:
use Illuminate\Support\Str;
$segments = Str::of('one, two, three')->split('/[\s,]+/');
// collect(["one", "two", "three"])
squish
这squish
方法从字符串中删除所有无关的空格,包括单词之间的无关空格:
use Illuminate\Support\Str;
$string = Str::of(' laravel framework ')->squish();
// laravel framework
start
这start
方法将给定值的单个实例添加到字符串(如果它尚未以该值开头):
use Illuminate\Support\Str;
$adjusted = Str::of('this/string')->start('/');
// /this/string
$adjusted = Str::of('/this/string')->start('/');
// /this/string
startsWith
这startsWith
方法确定给定字符串是否以给定值开头:
use Illuminate\Support\Str;
$result = Str::of('This is my name')->startsWith('This');
// true
studly
这studly
方法将给定的字符串转换为StudlyCase
:
use Illuminate\Support\Str;
$converted = Str::of('foo_bar')->studly();
// FooBar
substr
这substr
方法返回由给定的开始和长度参数指定的字符串部分:
use Illuminate\Support\Str;
$string = Str::of('Laravel Framework')->substr(8);
// Framework
$string = Str::of('Laravel Framework')->substr(8, 5);
// Frame
substrReplace
这substrReplace
方法替换字符串一部分中的文本,从第二个参数指定的位置开始,替换第三个参数指定的字符数。通过0
方法的第三个参数将在指定位置插入字符串,而不替换字符串中的任何现有字符:
use Illuminate\Support\Str;
$string = Str::of('1300')->substrReplace(':', 2);
// 13:
$string = Str::of('The Framework')->substrReplace(' Laravel', 3, 0);
// The Laravel Framework
swap
这swap
方法使用 PHP 替换字符串中的多个值strtr
功能:
use Illuminate\Support\Str;
$string = Str::of('Tacos are great!')
->swap([
'Tacos' => 'Burritos',
'great' => 'fantastic',
]);
// Burritos are fantastic!
tap
这tap
方法将字符串传递给给定的闭包,允许您在不影响字符串本身的情况下检查字符串并与之交互。原始字符串由tap
方法不管闭包返回什么:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('Laravel')
->append(' Framework')
->tap(function (Stringable $string) {
dump('String after append: '.$string);
})
->upper();
// LARAVEL FRAMEWORK
test
这test
方法确定字符串是否与给定的正则表达式模式匹配:
use Illuminate\Support\Str;
$result = Str::of('Laravel Framework')->test('/Laravel/');
// true
title
这title
方法将给定的字符串转换为Title Case
:
use Illuminate\Support\Str;
$converted = Str::of('a nice title uses the correct case')->title();
// A Nice Title Uses The Correct Case
trim
这trim
方法修剪给定的字符串:
use Illuminate\Support\Str;
$string = Str::of(' Laravel ')->trim();
// 'Laravel'
$string = Str::of('/Laravel/')->trim('/');
// 'Laravel'
ucfirst
这ucfirst
方法返回第一个字符大写的给定字符串:
use Illuminate\Support\Str;
$string = Str::of('foo bar')->ucfirst();
// Foo bar
ucsplit
这ucsplit
方法将给定的字符串按大写字符拆分为一个集合:
use Illuminate\Support\Str;
$string = Str::of('Foo Bar')->ucsplit();
// collect(['Foo', 'Bar'])
upper
这upper
方法将给定的字符串转换为大写:
use Illuminate\Support\Str;
$adjusted = Str::of('laravel')->upper();
// LARAVEL
when
这when
如果给定条件是,方法调用给定的闭包true
.闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('Taylor')
->when(true, function (Stringable $string) {
return $string->append(' Otwell');
});
// 'Taylor Otwell'
如有必要,您可以将另一个闭包作为第三个参数传递给when
方法。如果条件参数的计算结果为false
.
whenContains
这whenContains
如果字符串包含给定值,方法将调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('tony stark')
->whenContains('tony', function (Stringable $string) {
return $string->title();
});
// 'Tony Stark'
如有必要,您可以将另一个闭包作为第三个参数传递给when
方法。如果字符串不包含给定值,将执行此闭包。
您还可以传递一个值数组来确定给定字符串是否包含数组中的任何值:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('tony stark')
->whenContains(['tony', 'hulk'], function (Stringable $string) {
return $string->title();
});
// Tony Stark
whenContainsAll
这whenContainsAll
如果字符串包含所有给定的子字符串,方法将调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('tony stark')
->whenContainsAll(['tony', 'stark'], function (Stringable $string) {
return $string->title();
});
// 'Tony Stark'
如有必要,您可以将另一个闭包作为第三个参数传递给when
方法。如果条件参数的计算结果为false
.
whenEmpty
这whenEmpty
如果字符串为空,方法调用给定的闭包。如果闭包返回一个值,该值也将由whenEmpty
方法。如果闭包没有返回值,则返回 fluent string 实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of(' ')->whenEmpty(function (Stringable $string) {
return $string->trim()->prepend('Laravel');
});
// 'Laravel'
whenNotEmpty
这whenNotEmpty
如果字符串不为空,则方法调用给定的闭包。如果闭包返回一个值,该值也将由whenNotEmpty
方法。如果闭包没有返回值,则返回 fluent string 实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('Framework')->whenNotEmpty(function (Stringable $string) {
return $string->prepend('Laravel ');
});
// 'Laravel Framework'
whenStartsWith
这whenStartsWith
如果字符串以给定的子字符串开头,则方法调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('disney world')->whenStartsWith('disney', function (Stringable $string) {
return $string->title();
});
// 'Disney World'
whenEndsWith
这whenEndsWith
如果字符串以给定的子字符串结尾,则方法调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('disney world')->whenEndsWith('world', function (Stringable $string) {
return $string->title();
});
// 'Disney World'
whenExactly
这whenExactly
如果字符串与给定的字符串完全匹配,则方法调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel')->whenExactly('laravel', function (Stringable $string) {
return $string->title();
});
// 'Laravel'
whenNotExactly
这whenNotExactly
如果字符串与给定的字符串不完全匹配,方法将调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('framework')->whenNotExactly('laravel', function (Stringable $string) {
return $string->title();
});
// 'Framework'
whenIs
这whenIs
如果字符串匹配给定的模式,方法调用给定的闭包。星号可用作通配符值。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('foo/bar')->whenIs('foo/*', function (Stringable $string) {
return $string->append('/baz');
});
// 'foo/bar/baz'
whenIsAscii
这whenIsAscii
如果字符串是 7 位 ASCII,则方法调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel')->whenIsAscii(function (Stringable $string) {
return $string->title();
});
// 'Laravel'
whenIsUlid
这whenIsUlid
如果字符串是有效的 ULID,则方法调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
$string = Str::of('01gd6r360bp37zj17nxb55yv40')->whenIsUlid(function (Stringable $string) {
return $string->substr(0, 8);
});
// '01gd6r36'
whenIsUuid
这whenIsUuid
如果字符串是有效的 UUID,则方法调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('a0a2a2d2-0b87-4a18-83f2-2529882be2de')->whenIsUuid(function (Stringable $string) {
return $string->substr(0, 8);
});
// 'a0a2a2d2'
whenTest
这whenTest
如果字符串匹配给定的正则表达式,方法调用给定的闭包。闭包将接收流畅的字符串实例:
use Illuminate\Support\Str;
use Illuminate\Support\Stringable;
$string = Str::of('laravel framework')->whenTest('/laravel/', function (Stringable $string) {
return $string->title();
});
// 'Laravel Framework'
wordCount
这wordCount
方法返回字符串包含的单词数:
use Illuminate\Support\Str;
Str::of('Hello, world!')->wordCount(); // 2
words
这words
方法限制字符串中的单词数。如有必要,您可以指定一个附加字符串,该字符串将附加到截断的字符串中:
use Illuminate\Support\Str;
$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
// Perfectly balanced, as >>>
URLs
action()
这action
函数为给定的控制器操作生成一个 URL:
use App\Http\Controllers\HomeController;
$url = action([HomeController::class, 'index']);
如果该方法接受路由参数,您可以将它们作为第二个参数传递给该方法:
$url = action([UserController::class, 'profile'], ['id' => 1]);
asset()
这asset
函数使用请求的当前方案(HTTP 或 HTTPS)为资产生成 URL:
$url = asset('img/photo.jpg');
您可以通过设置资产 URL 主机来配置ASSET_URL
你的变量.env
文件。如果您将资产托管在 Amazon S3 或其他 CDN 等外部服务上,这将很有用:
// ASSET_URL=http://example.com/assets
$url = asset('img/photo.jpg'); // http://example.com/assets/img/photo.jpg
route()
这route
函数为给定的生成一个 URL命名路线:
$url = route('route.name');
如果路由接受参数,您可以将它们作为第二个参数传递给函数:
$url = route('route.name', ['id' => 1]);
默认情况下,route
函数生成一个绝对 URL。如果你想生成一个相对 URL,你可以通过false
作为函数的第三个参数:
$url = route('route.name', ['id' => 1], false);
secure_asset()
这secure_asset
函数使用 HTTPS 为资产生成 URL:
$url = secure_asset('img/photo.jpg');
secure_url()
这secure_url
函数生成给定路径的完全限定 HTTPS URL。可以在函数的第二个参数中传递额外的 URL 段:
$url = secure_url('user/profile');
$url = secure_url('user/profile', [1]);
to_route()
这to_route
函数生成一个重定向 HTTP 响应 对于给定的命名路线:
return to_route('users.show', ['user' => 1]);
如有必要,您可以将应分配给重定向的 HTTP 状态代码和任何其他响应标头作为第三个和第四个参数传递给to_route
方法:
return to_route('users.show', ['user' => 1], 302, ['X-Framework' => 'Laravel']);
url()
这url
函数生成给定路径的完全限定 URL:
$url = url('user/profile');
$url = url('user/profile', [1]);
如果没有提供路径,一个Illuminate\Routing\UrlGenerator
返回实例:
$current = url()->current();
$full = url()->full();
$previous = url()->previous();
Miscellaneous
abort()
abort(403);
您还可以提供应发送到浏览器的异常消息和自定义 HTTP 响应标头:
abort(403, 'Unauthorized.', $headers);
abort_if()
这abort_if
如果给定的布尔表达式的计算结果为,函数将抛出 HTTP 异常true
:
abort_if(! Auth::user()->isAdmin(), 403);
像abort
方法,您还可以提供异常的响应文本作为函数的第三个参数,并提供自定义响应标头数组作为函数的第四个参数。
abort_unless()
这abort_unless
如果给定的布尔表达式的计算结果为,函数将抛出 HTTP 异常false
:
abort_unless(Auth::user()->isAdmin(), 403);
像abort
方法,您还可以提供异常的响应文本作为函数的第三个参数,并提供自定义响应标头数组作为函数的第四个参数。
app()
这app
函数返回服务容器 实例:
$container = app();
您可以传递一个类或接口名称以从容器中解析它:
$api = app('HelpSpot\API');
auth()
这auth
函数返回一个authenticator 实例。您可以使用它作为替代Auth
正面:
$user = auth()->user();
如果需要,您可以指定要访问的守卫实例:
$user = auth('admin')->user();
back()
这back
函数生成一个重定向 HTTP 响应 到用户之前的位置:
return back($status = 302, $headers = [], $fallback = '/');
return back();
bcrypt()
这bcrypt
功能hashes 使用 Bcrypt 的给定值。您可以使用此功能替代Hash
正面:
$password = bcrypt('my-secret-password');
blank()
这blank
函数确定给定值是否为“空白”:
blank('');
blank(' ');
blank(null);
blank(collect());
// true
blank(0);
blank(true);
blank(false);
// false
对于的倒数blank
, 看到filled
方法。
broadcast()
这broadcast
功能broadcasts 给定的event 对它的听众:
broadcast(new UserRegistered($user));
broadcast(new UserRegistered($user))->toOthers();
cache()
这cache
函数可用于从cache.如果缓存中不存在给定的键,将返回一个可选的默认值:
$value = cache('key');
$value = cache('key', 'default');
您可以通过将键/值对数组传递给函数来将项目添加到缓存中。您还应该传递缓存值应被视为有效的秒数或持续时间:
cache(['key' => 'value'], 300);
cache(['key' => 'value'], now()->addSeconds(10));
class_uses_recursive()
这class_uses_recursive
函数返回一个类使用的所有特征,包括其所有父类使用的特征:
$traits = class_uses_recursive(App\Models\User::class);
collect()
这collect
函数创建一个collection 来自给定值的实例:
$collection = collect(['taylor', 'abigail']);
config()
这config
函数获取a的值configuration 多变的。可以使用“点”语法访问配置值,其中包括文件名和您希望访问的选项。如果配置选项不存在,可以指定默认值并返回:
$value = config('app.timezone');
$value = config('app.timezone', $default);
您可以通过传递键/值对数组在运行时设置配置变量。但是请注意,此函数只会影响当前请求的配置值,不会更新您的实际配置值:
config(['app.debug' => true]);
cookie()
这cookie
函数创建一个新的cookie 实例:
$cookie = cookie('name', 'value', $minutes);
csrf_field()
这csrf_field
函数生成一个 HTMLhidden
包含 CSRF 令牌值的输入字段。例如,使用刀片语法:
{{ csrf_field() }}
csrf_token()
这csrf_token
函数检索当前 CSRF 令牌的值:
$token = csrf_token();
decrypt()
这decrypt
功能decrypts 给定的值。您可以使用此功能替代Crypt
正面:
$password = decrypt($value);
dd()
这dd
函数转储给定的变量并结束脚本的执行:
dd($value);
dd($value1, $value2, $value3, ...);
如果您不想停止脚本的执行,请使用dump
代替功能。
dispatch()
这dispatch
函数推送给定的job 进入 Laravel作业队列:
dispatch(new App\Jobs\SendEmails);
dump()
这dump
函数转储给定的变量:
dump($value);
dump($value1, $value2, $value3, ...);
如果要在转储变量后停止执行脚本,请使用dd
代替功能。
encrypt()
这encrypt
功能encrypts 给定的值。您可以使用此功能替代Crypt
正面:
$secret = encrypt('my-secret-value');
env()
这env
函数检索一个值环境变量 或返回默认值:
$env = env('APP_ENV');
$env = env('APP_ENV', 'production');
Warning
如果你执行config:cache
命令在部署过程中,你应该确保你只调用env
从您的配置文件中运行。一旦配置被缓存,.env
文件将不会被加载,所有调用env
函数将返回null
.
event()
这event
函数调度给定的event 对它的听众:
event(new UserRegistered($user));
fake()
这fake
函数解析一个Faker 来自容器的单例,这在模型工厂、数据库播种、测试和原型视图中创建假数据时很有用:
@for($i = 0; $i < 10; $i++)
<dl>
<dt>Name</dt>
<dd>{{ fake()->name() }}</dd>
<dt>Email</dt>
<dd>{{ fake()->unique()->safeEmail() }}</dd>
</dl>
@endfor
默认情况下,fake
功能将利用app.faker_locale
你的配置选项config/app.php
配置文件;但是,您也可以通过将语言环境传递给fake
功能。每个语言环境将解析一个单独的单例:
fake('nl_NL')->name()
filled()
这filled
函数确定给定值是否不为“空”:
filled(0);
filled(true);
filled(false);
// true
filled('');
filled(' ');
filled(null);
filled(collect());
// false
对于的倒数filled
, 看到blank
方法。
info()
这info
函数会将信息写入您的应用程序的log:
info('Some helpful information!');
上下文数据数组也可以传递给函数:
info('User login attempt failed.', ['id' => $user->id]);
logger()
这logger
函数可以用来写一个debug
水平消息到log:
logger('Debug message');
上下文数据数组也可以传递给函数:
logger('User has logged in.', ['id' => $user->id]);
Alogger 如果没有值传递给函数,实例将被返回:
logger()->error('You are not allowed here.');
method_field()
这method_field
函数生成一个 HTMLhidden
输入字段包含表单的 HTTP 动词的欺骗值。例如,使用刀片语法:
<form method="POST">
{{ method_field('DELETE') }}
</form>
now()
这now
函数创建一个新的Illuminate\Support\Carbon
当前时间的实例:
$now = now();
old()
这old
功能retrieves 一个旧输入 值闪现到会话中:
$value = old('value');
$value = old('value', 'default');
由于“默认值”作为第二个参数提供给old
函数通常是 Eloquent 模型的一个属性,Laravel 允许你简单地将整个 Eloquent 模型作为第二个参数传递给old
功能。这样做时,Laravel 将假定提供给old
function 是应被视为“默认值”的 Eloquent 属性的名称:
{{ old('name', $user->name) }}
// Is equivalent to...
{{ old('name', $user) }}
optional()
这optional
函数接受任何参数并允许您访问该对象的属性或调用方法。如果给定的对象是null
,属性和方法将返回null
而不是导致错误:
return optional($user->address)->street;
{!! old('name', optional($user)->name) !!}
这optional
函数也接受一个闭包作为它的第二个参数。如果作为第一个参数提供的值不为空,则将调用闭包:
return optional(User::find($id), function (User $user) {
return $user->name;
});
policy()
这policy
方法检索一个policy 给定类的实例:
$policy = policy(App\Models\User::class);
redirect()
这redirect
函数返回一个重定向 HTTP 响应,或者如果不带参数调用则返回重定向器实例:
return redirect($to = null, $status = 302, $headers = [], $https = null);
return redirect('/home');
return redirect()->route('route.name');
report()
这report
函数将使用您的函数报告异常异常处理器:
report($e);
这report
函数也接受一个字符串作为参数。当给函数一个字符串时,该函数将创建一个异常,并将给定的字符串作为其消息:
report('Something went wrong.');
report_if()
这report_if
函数将使用您的函数报告异常异常处理器 如果给定条件是true
:
report_if($shouldReport, $e);
report_if($shouldReport, 'Something went wrong.');
report_unless()
这report_unless
函数将使用您的函数报告异常异常处理器 如果给定条件是false
:
report_unless($reportingDisabled, $e);
report_unless($reportingDisabled, 'Something went wrong.');
request()
这request
函数返回当前request 实例或从当前请求中获取输入字段的值:
$request = request();
$value = request('key', $default);
rescue()
这rescue
函数执行给定的闭包并捕获在其执行期间发生的任何异常。捕获的所有异常都将发送到您的异常处理器;但是,请求将继续处理:
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()
这resolve
函数将给定的类或接口名称解析为实例,使用服务容器:
$api = resolve('HelpSpot\API');
response()
这response
函数创建一个response 实例或获取响应工厂的实例:
return response('Hello World', 200, $headers);
return response()->json(['foo' => 'bar'], 200, $headers);
retry()
这retry
函数尝试执行给定的回调,直到达到给定的最大尝试阈值。如果回调没有抛出异常,则返回它的返回值。如果回调抛出异常,它会自动重试。如果超过最大尝试次数,将抛出异常:
return retry(5, function () {
// Attempt 5 times while resting 100ms between attempts...
}, 100);
如果您想手动计算尝试之间休眠的毫秒数,您可以将闭包作为第三个参数传递给retry
功能:
use Exception;
return retry(5, function () {
// ...
}, function (int $attempt, Exception $exception) {
return $attempt * 100;
});
为方便起见,您可以提供一个数组作为retry
功能。该数组将用于确定后续尝试之间要休眠多少毫秒:
return retry([100, 200], function () {
// Sleep for 100ms on first retry, 200ms on second retry...
});
要仅在特定条件下重试,您可以将闭包作为第四个参数传递给retry
功能:
use Exception;
return retry(5, function () {
// ...
}, 100, function (Exception $exception) {
return $exception instanceof RetryException;
});
session()
这session
函数可用于获取或设置session 价值观:
$value = session('key');
您可以通过将键/值对数组传递给函数来设置值:
session(['chairs' => 7, 'instruments' => 3]);
如果没有值传递给函数,会话存储将被返回:
$value = session()->get('key');
session()->put('key', $value);
tap()
这tap
函数接受两个参数:一个任意的$value
和一个关闭。这$value
将被传递给闭包,然后由tap
功能。闭包的返回值是无关紧要的:
$user = tap(User::first(), function (User $user) {
$user->name = 'taylor';
$user->save();
});
如果没有闭包传递给tap
函数,你可以调用给定的任何方法$value
.您调用的方法的返回值将始终是$value
,无论该方法在其定义中实际返回什么。例如,雄辩的update
方法通常返回一个整数。但是,我们可以通过链接update
通过方法调用tap
功能:
$user = tap($user)->update([
'name' => $name,
'email' => $email,
]);
添加一个tap
一个类的方法,你可以添加Illuminate\Support\Traits\Tappable
类的特征。这tap
这个特征的方法接受一个闭包作为它唯一的参数。对象实例本身将被传递给闭包,然后由tap
方法:
return $user->tap(function (User $user) {
// ...
});
throw_if()
这throw_if
如果给定的布尔表达式的计算结果为,函数将抛出给定的异常true
:
throw_if(! Auth::user()->isAdmin(), AuthorizationException::class);
throw_if(
! Auth::user()->isAdmin(),
AuthorizationException::class,
'You are not allowed to access this page.'
);
throw_unless()
这throw_unless
如果给定的布尔表达式的计算结果为,函数将抛出给定的异常false
:
throw_unless(Auth::user()->isAdmin(), AuthorizationException::class);
throw_unless(
Auth::user()->isAdmin(),
AuthorizationException::class,
'You are not allowed to access this page.'
);
today()
这today
函数创建一个新的Illuminate\Support\Carbon
当前日期的实例:
$today = today();
trait_uses_recursive()
这trait_uses_recursive
函数返回特征使用的所有特征:
$traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);
transform()
这transform
如果值不是,则函数对给定值执行闭包blank 然后返回闭包的返回值:
$callback = function (int $value) {
return $value * 2;
};
$result = transform(5, $callback);
// 10
默认值或闭包可以作为函数的第三个参数传递。如果给定值为空,将返回此值:
$result = transform(null, $callback, 'The value is blank');
// The value is blank
validator()
这validator
函数创建一个新的validator 具有给定参数的实例。您可以使用它作为替代Validator
正面:
$validator = validator($data, $rules, $messages);
value()
这value
函数返回给定的值。但是,如果将闭包传递给函数,则将执行闭包并返回其返回值:
$result = value(true);
// true
$result = value(function () {
return false;
});
// false
附加参数可以传递给value
功能。如果第一个参数是一个闭包,那么附加参数将作为参数传递给闭包,否则它们将被忽略:
$result = value(function (string $name) {
return $name;
}, 'Taylor');
// 'Taylor'
view()
这view
函数检索一个view 实例:
return view('auth.login');
with()
这with
函数返回给定的值。如果将闭包作为函数的第二个参数传递,则将执行闭包并返回其返回值:
$callback = function (mixed $value) {
return is_numeric($value) ? $value * 2 : 0;
};
$result = with(5, $callback);
// 10
$result = with(null, $callback);
// 0
$result = with(5, null);
// 5
其他实用程序
Benchmarking
有时您可能希望快速测试应用程序某些部分的性能。在这些情况下,您可以使用Benchmark
支持类来测量完成给定回调所需的毫秒数:
<?php
use App\Models\User;
use Illuminate\Support\Benchmark;
Benchmark::dd(fn () => User::find(1)); // 0.1 ms
Benchmark::dd([
'Scenario 1' => fn () => User::count(), // 0.5 ms
'Scenario 2' => fn () => User::all()->count(), // 20.0 ms
]);
默认情况下,给定的回调将执行一次(一次迭代),并且它们的持续时间将显示在浏览器/控制台中。
要多次调用回调,您可以将回调应调用的迭代次数指定为方法的第二个参数。多次执行回调时,Benchmark
类将返回在所有迭代中执行回调所花费的平均毫秒数:
Benchmark::dd(fn () => User::count(), iterations: 10); // 0.5 ms
Lottery
Laravel 的彩票类可用于根据一组给定的赔率执行回调。当您只想为一定比例的传入请求执行代码时,这会特别有用:
use Illuminate\Support\Lottery;
Lottery::odds(1, 20)
->winner(fn () => $user->won())
->loser(fn () => $user->lost())
->choose();
您可以将 Laravel 的彩票类与其他 Laravel 功能结合使用。例如,您可能希望只向异常处理程序报告一小部分慢速查询。而且,由于彩票类是可调用的,我们可以将类的实例传递给任何接受可调用对象的方法:
use Carbon\CarbonInterval;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Lottery;
DB::whenQueryingForLongerThan(
CarbonInterval::seconds(2),
Lottery::odds(1, 100)->winner(fn () => report('Querying > 2 seconds.')),
);
测试彩票
Laravel 提供了一些简单的方法来让你轻松测试应用程序的彩票调用:
// Lottery will always win...
Lottery::alwaysWin();
// Lottery will always lose...
Lottery::alwaysLose();
// Lottery will win then lose, and finally return to normal behavior...
Lottery::fix([true, false]);
// Lottery will return to normal behavior...
Lottery::determineResultsNormally();