Skip to content

辅助函数

介绍

Laravel 包含多种全局 "辅助" PHP 函数。许多这些函数被框架本身使用;然而,如果你觉得方便,你可以在自己的应用程序中使用它们。

可用方法

数组与对象

路径

字符串

URL

杂项

方法列表

数组与对象

Arr::add()

Arr::add 方法在给定键不存在或为 null 时,向数组添加给定的键/值对:

php
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 方法将数组的数组折叠为单个数组:

php
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::divide()

Arr::divide 方法返回两个数组,一个包含键,另一个包含给定数组的值:

php
use Illuminate\Support\Arr;

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

// $keys: ['name']

// $values: ['Desk']

Arr::dot()

Arr::dot 方法将多维数组展平为单级数组,使用 "点" 符号表示深度:

php
use Illuminate\Support\Arr;

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

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

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

Arr::except()

Arr::except 方法从数组中移除给定的键/值对:

php
use Illuminate\Support\Arr;

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

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

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

Arr::first()

Arr::first 方法返回通过给定真值测试的数组的第一个元素:

php
use Illuminate\Support\Arr;

$array = [100, 200, 300];

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

// 200

该方法的第三个参数可以传递一个默认值。如果没有值通过真值测试,将返回此值:

php
use Illuminate\Support\Arr;

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

Arr::flatten()

Arr::flatten 方法将多维数组展平为单级数组:

php
use Illuminate\Support\Arr;

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

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

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

Arr::forget()

Arr::forget 方法使用 "点" 符号从深度嵌套的数组中移除给定的键/值对:

php
use Illuminate\Support\Arr;

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

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

// ['products' => []]

Arr::get()

Arr::get 方法使用 "点" 符号从深度嵌套的数组中检索值:

php
use Illuminate\Support\Arr;

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

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

// 100

Arr::get 方法还接受一个默认值,如果未找到特定键,将返回此值:

php
use Illuminate\Support\Arr;

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

// 0

Arr::has()

Arr::has 方法检查数组中是否存在给定项或项,使用 "点" 符号:

php
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::last()

Arr::last 方法返回通过给定真值测试的数组的最后一个元素:

php
use Illuminate\Support\Arr;

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

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

// 300

该方法的第三个参数可以传递一个默认值。如果没有值通过真值测试,将返回此值:

php
use Illuminate\Support\Arr;

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

Arr::only()

Arr::only 方法仅返回给定数组中指定的键/值对:

php
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 方法从数组中检索给定键的所有值:

php
use Illuminate\Support\Arr;

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

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

// ['Taylor', 'Abigail']

你还可以指定希望结果列表如何键入:

php
use Illuminate\Support\Arr;

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

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

Arr::prepend()

Arr::prepend 方法将一个项目推到数组的开头:

php
use Illuminate\Support\Arr;

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

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

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

如果需要,你可以指定用于该值的键:

php
use Illuminate\Support\Arr;

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

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

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

Arr::pull()

Arr::pull 方法返回并移除数组中的键/值对:

php
use Illuminate\Support\Arr;

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

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

// $name: Desk

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

该方法的第三个参数可以传递一个默认值。如果键不存在,将返回此值:

php
use Illuminate\Support\Arr;

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

Arr::random()

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

php
use Illuminate\Support\Arr;

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

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

// 4 - (随机检索)

你还可以指定要返回的项目数量作为可选的第二个参数。请注意,提供此参数将返回一个数组,即使只需要一个项目:

php
use Illuminate\Support\Arr;

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

// [2, 5] - (随机检索)

Arr::set()

Arr::set 方法使用 "点" 符号在深度嵌套的数组中设置值:

php
use Illuminate\Support\Arr;

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

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

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

Arr::sort()

Arr::sort 方法按值对数组进行排序:

php
use Illuminate\Support\Arr;

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

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

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

你还可以通过给定闭包的结果对数组进行排序:

php
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()

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

php
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()

Arr::where 方法使用给定闭包过滤数组:

php
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()

Arr::wrap 方法将给定值包装在数组中。如果给定值已经是数组,则不会更改:

php
use Illuminate\Support\Arr;

$string = 'Laravel';

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

// ['Laravel']

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

php
use Illuminate\Support\Arr;

$nothing = null;

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

// []

data_fill()

data_fill 函数使用 "点" 符号在嵌套数组或对象中设置缺失值:

php
$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]]]

此函数还接受星号作为通配符,并将相应地填充目标:

php
$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 函数使用 "点" 符号从嵌套数组或对象中检索值:

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

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

// 100

data_get 函数还接受一个默认值,如果未找到指定键,将返回此值:

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

// 0

该函数还接受使用星号的通配符,可以定位数组或对象的任何键:

php
$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 函数使用 "点" 符号在嵌套数组或对象中设置值:

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

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

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

此函数还接受通配符,并将相应地在目标上设置值:

php
$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 作为第四个参数传递:

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

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

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

head 函数返回给定数组中的第一个元素:

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

$first = head($array);

// 100

last()

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

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

$last = last($array);

// 300

路径

app_path()

app_path 函数返回 app 目录的完全限定路径。你也可以使用 app_path 函数生成相对于应用程序目录的文件的完全限定路径:

php
$path = app_path();

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

base_path()

base_path 函数返回项目根目录的完全限定路径。你也可以使用 base_path 函数生成相对于项目根目录的给定文件的完全限定路径:

php
$path = base_path();

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

config_path()

config_path 函数返回 config 目录的完全限定路径。你也可以使用 config_path 函数生成应用程序配置目录中给定文件的完全限定路径:

php
$path = config_path();

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

database_path()

database_path 函数返回 database 目录的完全限定路径。你也可以使用 database_path 函数生成数据库目录中给定文件的完全限定路径:

php
$path = database_path();

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

mix()

mix 函数返回 版本化的 Mix 文件 的路径:

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

public_path()

public_path 函数返回 public 目录的完全限定路径。你也可以使用 public_path 函数生成公共目录中给定文件的完全限定路径:

php
$path = public_path();

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

resource_path()

resource_path 函数返回 resources 目录的完全限定路径。你也可以使用 resource_path 函数生成资源目录中给定文件的完全限定路径:

php
$path = resource_path();

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

storage_path()

storage_path 函数返回 storage 目录的完全限定路径。你也可以使用 storage_path 函数生成存储目录中给定文件的完全限定路径:

php
$path = storage_path();

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

字符串

__()

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

php
echo __('Welcome to our application');

echo __('messages.welcome');

如果指定的翻译字符串或键不存在,__ 函数将返回给定值。因此,使用上面的示例,如果翻译键不存在,__ 函数将返回 messages.welcome

class_basename()

class_basename 函数返回给定类的类名,并移除类的命名空间:

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

// Baz

e()

e 函数运行 PHP 的 htmlspecialchars 函数,默认情况下 double_encode 选项设置为 true

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

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

preg_replace_array()

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

php
$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 方法返回字符串中给定值之后的所有内容:

php
use Illuminate\Support\Str;

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

// ' my name'

Str::before()

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

php
use Illuminate\Support\Str;

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

// 'This is '

Str::camel()

Str::camel 方法将给定字符串转换为 camelCase

php
use Illuminate\Support\Str;

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

// fooBar

Str::contains()

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

php
use Illuminate\Support\Str;

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

// true

你还可以传递一个值数组,以确定给定字符串是否包含任何值:

php
use Illuminate\Support\Str;

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

// true

Str::containsAll()

Str::containsAll 方法确定给定字符串是否包含所有数组值:

php
use Illuminate\Support\Str;

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

// true

Str::endsWith()

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

php
use Illuminate\Support\Str;

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

// true

Str::finish()

Str::finish 方法在字符串末尾添加给定值的单个实例,如果它尚未以该值结尾:

php
use Illuminate\Support\Str;

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

// this/string/

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

// this/string/

Str::is()

Str::is 方法确定给定字符串是否与给定模式匹配。星号可用于指示通配符:

php
use Illuminate\Support\Str;

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

// true

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

// false

Str::kebab()

Str::kebab 方法将给定字符串转换为 kebab-case

php
use Illuminate\Support\Str;

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

// foo-bar

Str::limit()

Str::limit 方法在指定长度处截断给定字符串:

php
use Illuminate\Support\Str;

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

// The quick brown fox...

你还可以传递第三个参数来更改将附加到末尾的字符串:

php
use Illuminate\Support\Str;

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

// The quick brown fox (...)

Str::orderedUuid()

Str::orderedUuid 方法生成一个 "时间戳优先" 的 UUID,可以有效地存储在索引数据库列中:

php
use Illuminate\Support\Str;

return (string) Str::orderedUuid();

Str::plural()

Str::plural 方法将字符串转换为其复数形式。此函数目前仅支持英语:

php
use Illuminate\Support\Str;

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

// cars

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

// children

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

php
use Illuminate\Support\Str;

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

// children

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

// child

Str::random()

Str::random 方法生成指定长度的随机字符串。此函数使用 PHP 的 random_bytes 函数:

php
use Illuminate\Support\Str;

$random = Str::random(40);

Str::replaceArray()

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

php
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 方法替换字符串中给定值的第一次出现:

php
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 方法替换字符串中给定值的最后一次出现:

php
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()

Str::singular 方法将字符串转换为其单数形式。此函数目前仅支持英语:

php
use Illuminate\Support\Str;

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

// car

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

// child

Str::slug()

Str::slug 方法从给定字符串生成一个 URL 友好的 "slug":

php
use Illuminate\Support\Str;

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

// laravel-5-framework

Str::snake()

Str::snake 方法将给定字符串转换为 snake_case

php
use Illuminate\Support\Str;

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

// foo_bar

Str::start()

Str::start 方法在字符串开头添加给定值的单个实例,如果它尚未以该值开头:

php
use Illuminate\Support\Str;

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

// /this/string

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

// /this/string

Str::startsWith()

Str::startsWith 方法确定给定字符串是否以给定值开头:

php
use Illuminate\Support\Str;

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

// true

Str::studly()

Str::studly 方法将给定字符串转换为 StudlyCase

php
use Illuminate\Support\Str;

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

// FooBar

Str::title()

Str::title 方法将给定字符串转换为 Title Case

php
use Illuminate\Support\Str;

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

// A Nice Title Uses The Correct Case

Str::uuid()

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

php
use Illuminate\Support\Str;

return (string) Str::uuid();

Str::words()

Str::words 方法限制字符串中的单词数量:

php
use Illuminate\Support\Str;

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

// Perfectly balanced, as >>>

trans()

trans 函数使用你的 本地化文件 翻译给定的翻译键:

php
echo trans('messages.welcome');

如果指定的翻译键不存在,trans 函数将返回给定键。因此,使用上面的示例,如果翻译键不存在,trans 函数将返回 messages.welcome

trans_choice()

trans_choice 函数使用屈折翻译给定的翻译键:

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

如果指定的翻译键不存在,trans_choice 函数将返回给定键。因此,使用上面的示例,如果翻译键不存在,trans_choice 函数将返回 messages.notifications

URL

action()

action 函数为给定的控制器操作生成 URL。你不需要传递控制器的完整命名空间。相反,传递相对于 App\Http\Controllers 命名空间的控制器类名:

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

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

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

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

asset()

asset 函数使用请求的当前方案(HTTP 或 HTTPS)为资产生成 URL:

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

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

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

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

route()

route 函数为给定的命名路由生成 URL:

php
$url = route('routeName');

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

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

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

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

secure_asset()

secure_asset 函数使用 HTTPS 为资产生成 URL:

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

secure_url()

secure_url 函数生成给定路径的完全限定 HTTPS URL:

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

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

url()

url 函数生成给定路径的完全限定 URL:

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

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

如果未提供路径,将返回 Illuminate\Routing\UrlGenerator 实例:

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

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

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

杂项

abort()

abort 函数抛出 HTTP 异常,将由 异常处理程序 渲染:

php
abort(403);

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

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

abort_if()

abort_if 函数在给定布尔表达式计算为 true 时抛出 HTTP 异常:

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

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

abort_unless()

abort_unless 函数在给定布尔表达式计算为 false 时抛出 HTTP 异常:

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

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

app()

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

php
$container = app();

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

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

auth()

auth 函数返回 认证器 实例。你可以使用它代替 Auth facade 以方便:

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

如果需要,你可以指定要访问的守卫实例:

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

back()

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

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

return back();

bcrypt()

bcrypt 函数使用 Bcrypt 哈希 给定值。你可以将其用作 Hash facade 的替代品:

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

blank()

blank 函数返回给定值是否为 "空白":

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

// true

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

// false

有关 blank 的反义词,请参见 filled 方法。

broadcast()

broadcast 函数将给定 事件 广播 给其监听器:

php
broadcast(new UserRegistered($user));

cache()

cache 函数可用于从 缓存 中获取值。如果给定键在缓存中不存在,将返回可选的默认值:

php
$value = cache('key');

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

你可以通过将键/值对数组传递给函数来将项目添加到缓存中。你还应该传递缓存值应被视为有效的秒数或持续时间:

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

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

class_uses_recursive()

class_uses_recursive 函数返回类使用的所有特性,包括其所有父类使用的特性:

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

collect()

collect 函数从给定值创建一个 集合 实例:

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

config()

config 函数获取 配置 变量的值。配置值可以使用 "点" 语法访问,其中包括文件名和你希望访问的选项。可以指定默认值,如果配置选项不存在,将返回该值:

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

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

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

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

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

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

csrf_field()

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

php
{{ csrf_field() }}

csrf_token()

csrf_token 函数检索当前 CSRF 令牌的值:

php
$token = csrf_token();

dd()

dd 函数转储给定变量并结束脚本执行:

php
dd($value);

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

如果你不想在转储变量后停止脚本执行,请使用 dump 函数。

decrypt()

decrypt 函数使用 Laravel 的 加密器 解密给定值:

php
$decrypted = decrypt($encrypted_value);

dispatch()

dispatch 函数将给定 作业 推送到 Laravel 作业队列

php
dispatch(new App\Jobs\SendEmails);

dispatch_now()

dispatch_now 函数立即运行给定 作业 并返回其 handle 方法的值:

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

dump()

dump 函数转储给定变量:

php
dump($value);

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

如果你想在转储变量后停止执行脚本,请使用 dd 函数。

lightbulb

你可以使用 Artisan 的 dump-server 命令拦截所有 dump 调用,并将它们显示在控制台窗口中,而不是浏览器中。

encrypt()

encrypt 函数使用 Laravel 的 加密器 加密给定值:

php
$encrypted = encrypt($unencrypted_value);

env()

env 函数用于检索环境变量的值,或者返回默认值:

php
$env = env('APP_ENV');

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

如果您在部署过程中执行 config:cache 命令,您应该确保仅在配置文件中调用 env 函数。一旦配置被缓存,.env 文件将不会被加载,所有对 env 函数的调用将返回 null

event()

event 函数将给定的事件分派给其监听器:

php
event(new UserRegistered($user));

factory()

factory 函数为给定的类、名称和数量创建一个模型工厂构建器。它可以在测试播种时使用:

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

filled()

filled 函数返回给定值是否不为空:

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

// true

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

// false

有关 filled 的反义词,请参见 blank 方法。

info()

info 函数将信息写入日志

php
info('一些有用的信息!');

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

php
info('用户登录尝试失败。', ['id' => $user->id]);

logger()

logger 函数可用于将 debug 级别的消息写入日志

php
logger('调试消息');

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

php
logger('用户已登录。', ['id' => $user->id]);

如果没有传递值给该函数,将返回一个logger实例:

php
logger()->error('您不被允许访问此处。');

method_field()

method_field 函数生成一个 HTML hidden 输入字段,其中包含表单 HTTP 动词的伪造值。例如,使用 Blade 语法

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

now()

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

php
$now = now();

old()

old 函数检索闪存到会话中的旧输入值:

php
$value = old('value');

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

optional()

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

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

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

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

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

policy()

policy 方法检索给定类的策略实例:

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

redirect()

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

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

return redirect('/home');

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

report()

report 函数将使用您的异常处理程序report 方法报告异常:

php
report($e);

request()

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

php
$request = request();

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

rescue()

rescue 函数执行给定的闭包,并捕获其执行期间发生的任何异常。所有被捕获的异常将被发送到您的异常处理程序report 方法;然而,请求将继续处理:

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

您还可以将第二个参数传递给 rescue 函数。此参数将在执行闭包时发生异常时作为“默认”值返回:

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

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

resolve()

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

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

response()

response 函数创建一个响应实例或获取响应工厂的实例:

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

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

retry()

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

php
return retry(5, function () {
    // 尝试 5 次,每次尝试之间休息 100ms...
}, 100);

session()

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

php
$value = session('key');

您可以通过将键/值对数组传递给该函数来设置值:

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

如果没有传递值给该函数,将返回会话存储:

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

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

tap()

tap 函数接受两个参数:任意 $value 和一个闭包。$value 将被传递给闭包,然后由 tap 函数返回。闭包的返回值无关紧要:

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

    $user->save();
});

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

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

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

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

throw_if()

throw_if 函数在给定的布尔表达式计算为 true 时抛出给定的异常:

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

throw_if(
    ! Auth::user()->isAdmin(),
    AuthorizationException::class,
    '您不被允许访问此页面'
);

throw_unless()

throw_unless 函数在给定的布尔表达式计算为 false 时抛出给定的异常:

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

throw_unless(
    Auth::user()->isAdmin(),
    AuthorizationException::class,
    '您不被允许访问此页面'
);

today()

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

php
$today = today();

trait_uses_recursive()

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

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

transform()

transform 函数在给定值不为空白时执行 Closure,并返回 Closure 的结果:

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

$result = transform(5, $callback);

// 10

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

php
$result = transform(null, $callback, '值为空白');

// 值为空白

validator()

validator 函数使用给定的参数创建一个新的验证器实例。您可以使用它来代替 Validator facade 以方便:

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

value()

value 函数返回给定的值。然而,如果您传递一个 Closure 给该函数,Closure 将被执行,然后返回其结果:

php
$result = value(true);

// true

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

// false

view()

view 函数检索一个视图实例:

php
return view('auth.login');

with()

with 函数返回给定的值。如果将 Closure 作为第二个参数传递给该函数,Closure 将被执行并返回其结果:

php
$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