💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
* * * * * [TOC] ## 简介 Laravel 包含各种各样的全局「辅助」PHP 函数,框架本身也大量地使用了这些功能;如果你觉得方便,你可以在你的应用中自由的使用它们。 ## 可用方法 ### 数组 & 对象 [array_add()](#array_add_147) [array_collapse()](#array_collapse_157) [array_divide()](#array_divide_167) [array_dot()](#array_dot_179) [array_except()](#array_except_191) [array_first()](#array_first_203) [array_flatten()](#array_flatten_223) [array_forget()](#array_forget_235) [array_get()](#array_get_247) [array_has()](#array_has_267) [array_last()](#array_last_283) [array_only()](#array_only_303) [array_pluck()](#array_pluck_315) [array_prepend()](#array_prepend_338) [array_pull()](#array_pull_360) [array_random()](#array_random_380) [array_set()](#array_set_400) [array_sort()](#array_sort_412) [array_sort_recursive()](#array_sort_recursive_446) [array_where()](#array_where_466) [array_wrap()](#array_wrap_480) [data_fill()](#data_fill_502) [data_get()](#data_get_540) [data_set()](#data_set_560) [head()](#head_604) [last()](#last_616) ### 路径 [app_path()](#app_path_630) [base_path()](#base_path_640) [config_path()](#config_path_650) [database_path()](#database_path_660) [mix()](#mix_670) [public_path()](#public_path_678) [resource_path()](#resource_path_688) [storage_path()](#storage_path_698) ### 字符串 [__()](#___710) [camel_case()](#camel_case_722) [class_basename()](#class_basename_732) [e()](#e_742) [ends_with()](#ends_with_752) [kebab_case()](#kebab_case_762) [preg_replace_array()](#preg_replace_array_772) [snake_case()](#snake_case_784) [starts_with()](#starts_with_794) [str_after()](#str_after_804) [str_before()](#str_before_814) [str_contains()](#str_contains_824) [str_finish()](#str_finish_842) [str_is()](#str_is_856) [str_limit()](#str_limit_870) [Str::orderedUuid()](#StrorderedUuid_888) [str_plural()](#str_plural_898) [str_random()](#str_random_924) [str_replace_array()](#str_replace_array_932) [str_replace_first()](#str_replace_first_944) [str_replace_last()](#str_replace_last_954) [str_singular()](#str_singular_964) [str_slug()](#str_slug_978) [str_start()](#str_start_988) [studly_case()](#studly_case_1002) [title_case()](#title_case_1012) [trans()](#trans_1022) [trans_choice()](#trans_choice_1032) [Str::uuid()](#Struuid_1042) ### URLs [action()](#action_1054) [asset()](#asset_1068) [secure_asset()](#secure_asset_1076) [route()](#route_1084) [secure_url()](#secure_url_1104) [url()](#url_1114) ### 其他 [abort()](#abort_1136) [abort_if()](#abort_if_1150) [abort_unless()](#abort_unless_1160) [app()](#app_1170) [auth()](#auth_1184) [back()](#back_1198) [bcrypt()](#bcrypt_1208) [broadcast()](#broadcast_1216) [blank()](#blank_1224) [cache()](#cache_1245) [class_uses_recursive()](#class_uses_recursive_1263) [collect()](#collect_1271) [config()](#config_1279) [cookie()](#cookie_1295) [csrf_field()](#csrf_field_1303) [csrf_token()](#csrf_token_1311) [dd()](#dd_1319) [decrypt()](#decrypt_1331) [dispatch()](#dispatch_1339) [dispatch_now()](#dispatch_now_1347) [dump()](#dump_1355) [encrypt()](#encrypt_1367) [env()](#env_1375) [event()](#event_1388) [factory()](#factory_1396) [filled()](#filled_1404) [info()](#info_1425) [logger()](#logger_1439) [method_field()](#method_field_1459) [now()](#now_1469) [old()](#old_1477) [optional()](#optional_1487) [policy()](#policy_1497) [redirect()](#redirect_1505) [report()](#report_1517) [request()](#request_1525) [rescue()](#rescue_1535) [resolve()](#resolve_1559) [response()](#response_1567) [retry()](#retry_1577) [session()](#session_1587) [tap()](#tap_1609) [today()](#today_1630) [throw_if()](#throw_if_1638) [throw_unless()](#throw_unless_1652) [trait_uses_recursive()](#trait_uses_recursive_1666) [transform()](#transform_1674) [validator()](#validator_1696) [value()](#value_1704) [view()](#view_1720) [with()](#with_1728) ## 方法列表 ## 数组 & 对象 #### `array_add()` 如果给定的键不在数组中,那么 `array_add` 函数将会把给定的键/值对添加到数组中: ~~~ $array = array_add(['name' => 'Desk'], 'price', 100); // ['name' => 'Desk', 'price' => 100] ~~~ #### `array_collapse()` `array_collapse` 函数将多个单数组合并成一个数组: ~~~ $array = array_collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); // [1, 2, 3, 4, 5, 6, 7, 8, 9] ~~~ #### `array_divide()` `array_divide` 函数返回两个数组,一个包含原始数组的健,另一个包含原始数组的值: ~~~ [$keys, $values] = array_divide(['name' => 'Desk']); // $keys: ['name'] // $values: ['Desk'] ~~~ #### `array_dot()` `array_dot` 函数将多维数组平铺到一维数组中,该数组使用「点」符号表示深度: ~~~ $array = ['products' => ['desk' => ['price' => 100]]]; $flattened = array_dot($array); // ['products.desk.price' => 100] ~~~ #### `array_except()` `array_except` 函数从数组中删除给定的键/值对: ~~~ $array = ['name' => 'Desk', 'price' => 100]; $filtered = array_except($array, ['price']); // ['name' => 'Desk'] ~~~ #### `array_first()` `array_first` 函数返回数组中第一个通过指定测试的元素: ~~~ $array = [100, 200, 300]; $first = array_first($array, function ($value, $key) { return $value >= 150; }); // 200 ~~~ 将默认值作为第三个参数传递给该方法。如果没有值通过测试,则返回该值: ~~~ $first = array_first($array, $callback, $default); ~~~ #### `array_flatten()` `array_flatten` 函数将多维数组平铺为一维数组。 ~~~ $array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']]; $flattened = array_flatten($array); // ['Joe', 'PHP', 'Ruby'] ~~~ #### `array_forget()` `array_forget` 函数使用「点」符号从深度嵌套数组中移除给定的键/值对: ~~~ $array = ['products' => ['desk' => ['price' => 100]]]; array_forget($array, 'products.desk'); // ['products' => []] ~~~ #### `array_get()` `array_get` 函数使用「点」符号从深度嵌套的数组中检索值: ~~~ $array = ['products' => ['desk' => ['price' => 100]]]; $price = array_get($array, 'products.desk.price'); // 100 ~~~ `array_get` 函数也接受一个默认值,如果没有找到指定的健,则返回该值: ~~~ $discount = array_get($array, 'products.desk.discount', 0); // 0 ~~~ #### `array_has()` `array_has` 函数使用「点」符号检查数组中是否存在给定的项目或项目组: ~~~ $array = ['product' => ['name' => 'Desk', 'price' => 100]]; $contains = array_has($array, 'product.name'); // true $contains = array_has($array, ['product.price', 'product.discount']); // false ~~~ #### `array_last()` `array_last` 函数返回数组中最后一个通过指定测试的元素: ~~~ $array = [100, 200, 300, 110]; $last = array_last($array, function ($value, $key) { return $value >= 150; }); // 300 ~~~ 将默认值作为第三个参数传递给该方法。如果没有值通过测试,则返回该值: ~~~ $last = array_last($array, $callback, $default); ~~~ #### `array_only()` `array_only` 函数仅返回给定数组中指定的键/值对: ~~~ $array = ['name' => 'Desk', 'price' => 100, 'orders' => 10]; $slice = array_only($array, ['name', 'price']); // ['name' => 'Desk', 'price' => 100] ~~~ #### `array_pluck()` `array_pluck` 函数从数组中检索给定键的所有值: ~~~ $array = [ ['developer' => ['id' => 1, 'name' => 'Taylor']], ['developer' => ['id' => 2, 'name' => 'Abigail']], ]; $names = array_pluck($array, 'developer.name'); // ['Taylor', 'Abigail'] ~~~ 你也可以指定生成的列表的键: ~~~ $names = array_pluck($array, 'developer.name', 'developer.id'); // [1 => 'Taylor', 2 => 'Abigail'] ~~~ #### `array_prepend()` `array_prepend` 函数将一个项目推到数组的开头: ~~~ $array = ['one', 'two', 'three', 'four']; $array = array_prepend($array, 'zero'); // ['zero', 'one', 'two', 'three', 'four'] ~~~ 你可以指定用于该值的键: ~~~ $array = ['price' => 100]; $array = array_prepend($array, 'Desk', 'name'); // ['name' => 'Desk', 'price' => 100] ~~~ #### `array_pull()` `array_pull` 函数返回并从数组中删除键/值对: ~~~ $array = ['name' => 'Desk', 'price' => 100]; $name = array_pull($array, 'name'); // $name: Desk // $array: ['price' => 100] ~~~ 将默认值作为第三个参数传递给该方法。如果键不存在,则返回该值: ~~~ $value = array_pull($array, $key, $default); ~~~ #### `array_random()` `array_random` 函数从数组中返回一个随机值: ~~~ $array = [1, 2, 3, 4, 5]; $random = array_random($array); // 4 - (retrieved randomly) ~~~ 你也可以指定要返回的随机数的数量作为第二个可选参数。一旦你指定了第二个参数,即使数量为 1,这个函数也会返回一个数组: ~~~ $items = array_random($array, 2); // [2, 5] - (retrieved randomly) ~~~ #### `array_set()` `array_set` 函数使用「点」符号在深度嵌套的数组中设置一个值: ~~~ $array = ['products' => ['desk' => ['price' => 100]]]; array_set($array, 'products.desk.price', 200); // ['products' => ['desk' => ['price' => 200]]] ~~~ #### `array_sort()` `array_sort` 函数按照其值排序数组: ~~~ $array = ['Desk', 'Table', 'Chair']; $sorted = array_sort($array); // ['Chair', 'Desk', 'Table'] ~~~ 你也可以按给定的闭包返回的结果对数组进行排序: ~~~ $array = [ ['name' => 'Desk'], ['name' => 'Table'], ['name' => 'Chair'], ]; $sorted = array_values(array_sort($array, function ($value) { return $value['name']; })); /* [ ['name' => 'Chair'], ['name' => 'Desk'], ['name' => 'Table'], ] */ ~~~ #### `array_sort_recursive()` `array_sort_recursive` 函数使用 `sort` 函数递归排序数组: ~~~ $array = [ ['Roman', 'Taylor', 'Li'], ['PHP', 'Ruby', 'JavaScript'], ]; $sorted = array_sort_recursive($array); /* [ ['Li', 'Roman', 'Taylor'], ['JavaScript', 'PHP', 'Ruby'], ] */ ~~~ #### `array_where()` `array_where` 函数使用给定的闭包来过滤数组: ~~~ $array = [100, '200', 300, '400', 500]; $filtered = array_where($array, function ($value, $key) { return is_string($value); }); // [1 => 200, 3 => 400] ~~~ #### `array_wrap()` `array_wrap` 函数将给定的值包装成一个数组。如果给定的值已经是一个数组,则不会被改变: ~~~ $string = 'Laravel'; $array = array_wrap($string); // ['Laravel'] ~~~ 如果给定的值是空,则返回一个空数组: ~~~ $nothing = null; $array = array_wrap($nothing); // [] ~~~ #### `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_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, 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 ~~~ ## 路径 #### `app_path()` `app_path` 返回 `app` 目录的完整路径。你还可以使用 `app_path` 函数来生成相对于 `app` 目录的文件完整路径: ~~~ $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'); ~~~ #### `mix()` `mix` 函数获取 [版本化 Mix 文件](https://www.kancloud.cn/tonyyu/laravel_5_6/786204) 的路径: ~~~ $path = mix('css/app.css'); ~~~ #### `public_path()` `public_path` 函数返回`public` 目录的完整路径。你也可以使用 `public_path` 函数来生成 `public` 目录中给定文件的完整路径: ~~~ $path = public_path(); $path = public_path('css/app.css'); ~~~ #### `resource_path()` `resource_path` 函数返回 `resources` 目录的完整路径。你也可以使用 `resource_path` 函数来生成相对于资源目录的指定文件的完整路径: ~~~ $path = resource_path(); $path = resource_path('assets/sass/app.scss'); ~~~ #### `storage_path()` `storage_path` 函数返回 `storage` 目录的完整路径。你也可以使用 `storage_path` 来生成相对于储存目录的指定文件的完整路径: ~~~ $path = storage_path(); $path = storage_path('app/file.txt'); ~~~ ## 字符串 #### `__()` `__` 函数使用你的 [本地化文件](https://www.kancloud.cn/tonyyu/laravel_5_6/786202)来翻译给定的翻译字符串或翻译键: ~~~ echo __('Welcome to our application'); echo __('messages.welcome'); ~~~ 如果指定的翻译字符串或键不存在,则 `__` 函数会简单地返回给定的值。所以,按照上面的例子,如果翻译键 `messages.welcome` 不存在,`__` 方法会将其直接返回。 #### `camel_case()` `camel_case` 函数将给定的字符串转换为「驼峰命名」: ~~~ $converted = camel_case('foo_bar'); // fooBar ~~~ #### `class_basename()` `class_basename` 返回给定类删除命名空间的类名: ~~~ $class = class_basename('Foo\Bar\Baz'); // Baz ~~~ #### `e()` `e` 函数将 `double_encode` 选项设置为 `false` 来运行 PHP 的 `htmlspecialchars` 函数: ~~~ echo e('<html>foo</html>'); // <html>foo</html> ~~~ #### `ends_with()` `ends_with` 函数判断给定的字符串是否以给定的值结尾: ~~~ $result = ends_with('This is my name', 'name'); // true ~~~ #### `kebab_case()` `kebab_case` 函数将给定的字符串转换为「短横线命名」: ~~~ $converted = kebab_case('fooBar'); // foo-bar ~~~ #### `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); // 活动将在 8:30 至 9:00 之间进行 ~~~ #### `snake_case()` `snake_case` 函数将给定的字符串转换为「蛇形命名」: ~~~ $converted = snake_case('fooBar'); // foo_bar ~~~ #### `starts_with()` `starts_with` 函数判断给定的字符串的开头是否是指定值: ~~~ $result = starts_with('This is my name', 'This'); // true ~~~ #### `str_after()` `str_after` 函数返回字符串中指定值之后的所有内容: ~~~ $slice = str_after('This is my name', 'This is'); // ' my name' ~~~ #### `str_before()` `str_before` 函数返回字符串中给定值之前的所有内容: ~~~ $slice = str_before('This is my name', 'my name'); // 'This is ' ~~~ #### `str_contains()` `str_contains` 函数判断给定的字符串是否包含给定的值: ~~~ $contains = str_contains('This is my name', 'my'); // true ~~~ 你也可以传递一个值的数组来判断给定的字符串是否包含任何值: ~~~ $contains = str_contains('This is my name', ['my', 'foo']); // true ~~~ #### `str_finish()` str_finish 函数将给定字符串以给定值结尾返回(如果它尚未以给定值结尾): ~~~ $adjusted = str_finish('this/string', '/'); // this/string/ $adjusted = str_finish('this/string/', '/'); // this/string/ ~~~ #### `str_is()` `str_is` 函数判断给定的字符串是否匹配给定的模式。星号(`*`)可以用来表示通配符: ~~~ $matches = str_is('foo*', 'foobar'); // true $matches = str_is('baz*', 'foobar'); // false ~~~ #### `str_limit()` `str_limit` 函数按给定的长度截断给定的字符串: ~~~ $truncated = str_limit('The quick brown fox jumps over the lazy dog', 20); // The quick brown fox... ~~~ 你也可以传递第三个参数来改变将被追加到最后的字符串: ~~~ $truncated = str_limit('The quick brown fox jumps over the lazy dog', 20, ' (...)'); // The quick brown fox (...) ~~~ #### `Str::orderedUuid()` `Str::orderedUuid` 方法高效生成一个可储存在索引数据库列中的 「第一时间」 UUID: ~~~ use Illuminate\Support\Str; return (string) Str::orderedUuid(); ~~~ #### `str_plural()` `str_plural` 函数将字符串转换为复数形式。这个函数目前仅支持英文: ~~~ $plural = str_plural('car'); // cars $plural = str_plural('child'); // children ~~~ 你可以提供一个整数作为函数的第二个参数来检索字符串的单数或复数形式: ~~~ $plural = str_plural('child', 2); // children $plural = str_plural('child', 1); // child ~~~ #### `str_random()` `str_random` 函数生成一个指定长度的随机字符串。这个函数数用 PHP 的 `random_bytes` 函数: ~~~ $random = str_random(40); ~~~ #### `str_replace_array()` `str_replace_array` 函数使用数组顺序替换字符串中的给定值: ~~~ $string = '该活动将于 ? 至 ? 之间举行'; $replaced = str_replace_array('?', ['8:30', '9:00'], $string); // 该活动将于 8:30 至 9:00 之间举行 ~~~ #### `str_replace_first()` `str_replace_first` 函数替换字符串中给定值的第一个匹配项: ~~~ $replaced = str_replace_first('the', 'a', 'the quick brown fox jumps over the lazy dog'); // a quick brown fox jumps over the lazy dog ~~~ #### `str_replace_last()` `str_replace_last` 函数替换字符串中最后一次出现的给定值: ~~~ $replaced = str_replace_last('the', 'a', 'the quick brown fox jumps over the lazy dog'); // the quick brown fox jumps over a lazy dog ~~~ #### `str_singular()` `str_singular` 函数将字符串转换为单数形式。这个函数目前仅支持英文: ~~~ $singular = str_singular('cars'); // car $singular = str_singular('children'); // child ~~~ #### `str_slug()` `str_slug` 函数根据给定的字符串生成一个 URL 友好的「slug」: ~~~ $slug = str_slug('Laravel 5 Framework', '-'); // laravel-5-framework ~~~ #### `str_start()` `str_start` 函数将给定值的单个实例添加到字符串(如果它尚未以值开始): ~~~ $adjusted = str_start('this/string', '/'); // /this/string $adjusted = str_start('/this/string/', '/'); // /this/string ~~~ #### `studly_case()` `studly_case` 函数将给定的字符串转换为「变种驼峰命名」: ~~~ $converted = studly_case('foo_bar'); // FooBar ~~~ #### `title_case()` `title_case` 函数将给定的字符串转换为「首字母大写」: ~~~ $converted = title_case('a nice title uses the correct case'); // A Nice Title Uses The Correct Case ~~~ #### `trans()` `trans` 函数使用你的 [本地化文件](https://www.kancloud.cn/tonyyu/laravel_5_6/786202) 来翻译给定的翻译字符串或翻译键: ~~~ echo trans('messages.welcome'); ~~~ 如果指定的翻译键不存在,则 `trans` 方法会简单地返回给定的键。所以,就上面的例子而言,如果翻译键不存在, `trans` 方法会返回 `messages.welcome`。 #### `trans_choice()` `trans_choice` 函数根据词形变化来翻译给定的翻译键: ~~~ echo trans_choice('messages.notifications', $unreadCount); ~~~ 如果指定的翻译键不存在,`trans_choice` 方法会简单地返回给定的键。所以,按照上面的例子,如果翻译键不存在,`trans_choice` 方法会返回 `messages.notifications`。 #### `Str::uuid()` `Str::uuid` 方法生成一个 UUID(版本 4): ~~~ use Illuminate\Support\Str; return (string) Str::uuid(); ~~~ ## URLs #### `action()` `action` 函数为指定的控制器动作生成一个 URL。你不需要传递完整的控制器命名空间。只需要传递相对于 `App\Http\Controllers` 的命名空间的控制器类名称: ~~~ $url = action('HomeController@index'); ~~~ 如果该方法接受路由参数,则可以将它们作为方法的第二个参数传递: ~~~ $url = action('UserController@profile', ['id' => 1]); ~~~ #### `asset()` `asset` 函数使用当前请求的协议( HTTP 或 HTTPS )为资源文件生成 URL: ~~~ $url = asset('img/photo.jpg'); ~~~ #### `secure_asset()` `secure_asset` 函数使用 HTTPS 协议为资源文件生成 URL: ~~~ $url = secure_asset('img/photo.jpg'); ~~~ #### `route()` `route` 函数为给定的命名路由生成一个 URL: ~~~ $url = route('routeName'); ~~~ 如果路由接受参数,则可以将它们作为方法的第二个参数传递: ~~~ $url = route('routeName', ['id' => 1]); ~~~ 默认情况下,`route` 函数生成的是绝对 URL。如果你想生成一个相对 URL,你可以传递 `false` 作为第三个参数: ~~~ $url = route('routeName', ['id' => 1], false); ~~~ #### `secure_url()` `secure_url` 函数为给定的路径生成一个标准的 HTTPS URL: ~~~ $url = secure_url('user/profile'); $url = secure_url('user/profile', [1]); ~~~ #### `url()` `url` 函数生成给定路径的标准 URL: ~~~ $url = url('user/profile'); $url = url('user/profile', [1]); ~~~ 如果没有提供路径,则返回 `Illuminate\Routing\UrlGenerator` 实例: ~~~ $current = url()->current(); $full = url()->full(); $previous = url()->previous(); ~~~ ## 其他 #### `abort()` `abort` 函数抛出 [异常处理](https://www.kancloud.cn/tonyyu/laravel_5_6/786182#_12) 程序呈现的 [HTTP 异常](https://www.kancloud.cn/tonyyu/laravel_5_6/786182#HTTP__135): ~~~ abort(403); ~~~ 你也可以提供额外的响应文本和自定义响应标头: ~~~ abort(403, 'Unauthorized.', $headers); ~~~ #### `abort_if()` 如果给定的布尔表达式计算结果为 `true`, `abort_if` 函数将抛出一个 HTTP 异常: ~~~ abort_if(! Auth::user()->isAdmin(), 403); ~~~ 和 `abort` 方法一样,你也可以提供异常的响应文本作为第三个参数,并提供一个自定义响应头数组作为第四个参数。 #### `abort_unless()` 如果给定的布尔表达式计算结果为 `false`,`abort_unless` 函数将抛出一个 HTTP 异常: ~~~ abort_unless(Auth::user()->isAdmin(), 403); ~~~ 和 `abort` 方法一样,你也可以提供异常的响应文本作为第三个参数,并提供一个自定义响应头数组作为第四个参数。 #### `app()` `app` 函数返回 [服务容器](https://www.kancloud.cn/tonyyu/laravel_5_6/786056) 实例: ~~~ $container = app(); ~~~ 你可以传递一个类或接口名称来从容器中解析它: ~~~ $api = app('HelpSpot\API'); ~~~ #### `auth()` `auth` 函数返回一个 [认证](https://www.kancloud.cn/tonyyu/laravel_5_6/786216) 实例。为了方便起见,你可以使用它来替代 `Auth` Facade: ~~~ $user = auth()->user(); ~~~ 如果需要,你可以指定你想要访问的认证实例: ~~~ $user = auth('admin')->user(); ~~~ #### `back()` `back` 函数生成一个[重定向 HTTP 响应](https://www.kancloud.cn/tonyyu/laravel_5_6/786177#_98)到用户之前的位置: ~~~ return back($status = 302, $headers = [], $fallback = false); return back(); ~~~ #### `bcrypt()` `bcrypt` [哈希](https://www.kancloud.cn/tonyyu/laravel_5_6/786220) 使用 Bcrypt 对给定的值进行散列。你可以使用它替代 `Hash` facade: ~~~ $password = bcrypt('my-secret-password'); ~~~ #### `broadcast()` `broadcast` 函数将[广播](https://www.kancloud.cn/tonyyu/laravel_5_6/786239)给定的[事件](https://www.kancloud.cn/tonyyu/laravel_5_6/786242)到它的监听器: ~~~ broadcast(new UserRegistered($user)); ~~~ #### `blank()` `blank` 函数判断给定的值是否为「空」: ~~~ blank(''); blank(' '); blank(null); blank(collect()); // true blank(0); blank(true); blank(false); // false ~~~ 要使用与 `blank` 相反的功能,请看 [`filled`](#filled_1404) 方法。 #### `cache()` `cache` 函数可以用来从[缓存](https://www.kancloud.cn/tonyyu/laravel_5_6/786240)中获取值。如果缓存中不存在给定的健,则返回一个可选的默认值: ~~~ $value = cache('key'); $value = cache('key', 'default'); ~~~ 你可以通过将一组键/值对传递给函数来将其添加到缓存中。与此同时,你还应该传递有效的分钟数或持续时间作为缓存过期时间: ~~~ cache(['key' => 'value'], 5); cache(['key' => 'value'], now()->addSeconds(10)); ~~~ #### `class_uses_recursive()` `class_uses_recursive` 函数返回一个类使用的所有 traits,包括任何子类使用的 traits: ~~~ $traits = class_uses_recursive(App\User::class); ~~~ #### `collect()` `collect` 函数根据给定的数组创建一个[集合](https://www.kancloud.cn/tonyyu/laravel_5_6/786241)实例: ~~~ $collection = collect(['taylor', 'abigail']); ~~~ #### `config()` `config` 函数获取[配置](https://www.kancloud.cn/tonyyu/laravel_5_6/786051)变量的值。可以使用「点」语法访问配置值,其中包括文件的名称和希望访问的选项。如果配置选项不存在,则可以指定一个默认值并返回: ~~~ $value = config('app.timezone'); $value = config('app.timezone', $default); ~~~ 可以在运行时通过传递一组键/值对来设置配置变量: ~~~ config(['app.debug' => true]); ~~~ #### `cookie()` `cookie` 函数创建一个新的 [cookie](https://www.kancloud.cn/tonyyu/laravel_5_6/786157#Cookies_304) 实例: ~~~ $cookie = cookie('name', 'value', $minutes); ~~~ #### `csrf_field()` `csrf_field` 函数生成包含 CSRF 令牌值的 HTML`hidden` 表单字段。例如,使用 [Blade 语法](https://www.kancloud.cn/tonyyu/laravel_5_6/786198): ~~~ {{ csrf_field() }} ~~~ #### `csrf_token()` `csrf_token` 函数获取当前 CSRF 令牌的值: ~~~ $token = csrf_token(); ~~~ #### `dd()` `dd` 函数输出给定的值并结束脚本运行: ~~~ dd($value); dd($value1, $value2, $value3, ...); ~~~ 如果你不想终止脚本运行,请改用 [`dump`](#dump_1355) 函数。 #### `decrypt()` `decrypt` 函数使用 Laravel 的[加密器](https://www.kancloud.cn/tonyyu/laravel_5_6/786219)来解密给定的值: ~~~ $decrypted = decrypt($encrypted_value); ~~~ #### `dispatch()` `dispatch` 函数将给定的[任务](https://www.kancloud.cn/tonyyu/laravel_5_6/786248#_85)推送到 Laravel [任务列队](https://www.kancloud.cn/tonyyu/laravel_5_6/786248)中: ~~~ dispatch(new App\Jobs\SendEmails); ~~~ #### `dispatch_now()` `dispatch_now` 函数立即运行给定的[任务](https://www.kancloud.cn/tonyyu/laravel_5_6/786248#_85),并从其 `handle` 方法返回值: ~~~ $result = dispatch_now(new App\Jobs\SendEmails); ~~~ #### `dump()` `dump` 函数打印给定的变量: ~~~ dump($value); dump($value1, $value2, $value3, ...); ~~~ 如果要在打印变量后停止执行脚本,请改用 [`dd`](#dd_1319) 函数。 #### `encrypt()` `encrypt` 函数使用 Laravel 的[加密器](https://www.kancloud.cn/tonyyu/laravel_5_6/786219)对给定的值进行加密: ~~~ $encrypted = encrypt($unencrypted_value); ~~~ #### `env()` `env` 函数获取[环境变量](https://www.kancloud.cn/tonyyu/laravel_5_6/786051#_6)的值或者返回默认值: ~~~ $env = env('APP_ENV'); // 如果环境变量不存在则返回默认值... $env = env('APP_ENV', 'production'); ~~~ > {note} 如果在你在部署过程中执行 `config:cache` 命令,则应该保证只在配置中调用 `env` 函数。一旦配置被缓存,`.env` 文件则不会再被加载,所有对 `env` 函数的调用都将返回 `null`。 #### `event()` `event` 函数将给定的[事件](https://www.kancloud.cn/tonyyu/laravel_5_6/786242)分派给它的监听器: ~~~ event(new UserRegistered($user)); ~~~ #### `factory()` `factory` 函数根据给定的类、名称和数量创建一个模型工厂构建器。可以在[测试](https://www.kancloud.cn/tonyyu/laravel_5_6/786284#_68)或[数据填充](https://www.kancloud.cn/tonyyu/laravel_5_6/786284#_111)中使用: ~~~ $user = factory(App\User::class)->make(); ~~~ #### `filled()` filled 函数判断给定的值是否不为「空」: ~~~ filled(0); filled(true); filled(false); // true filled(''); filled(' '); filled(null); filled(collect()); // false ~~~ 要使用与 `filled` 相反的功能,请看 [`blank`](#blank_1224) 方法。 #### `info()` `info` 函数将信息写入[日志](https://www.kancloud.cn/tonyyu/laravel_5_6/786183): ~~~ info('一些有用的信息!'); ~~~ 有前后关系的数组也可以传递给函数: ~~~ info('用户登录尝试失败。', ['id' => $user->id]); ~~~ #### `logger()` `logger` 函数可以将一个 `debug` 级别的消息写入到[日志](https://www.kancloud.cn/tonyyu/laravel_5_6/786183)中: ~~~ logger('Debug 消息'); ~~~ 有前后关系的数组也可以传递给函数: ~~~ logger('User has logged in.', ['id' => $user->id]); ~~~ 如果没有传值给函数则返回[日志](https://www.kancloud.cn/tonyyu/laravel_5_6/786183)的实例: ~~~ logger()->error('You are not allowed here.'); ~~~ #### `method_field()` `method_field` 函数生成一个 HTML `hidden` 表单字段,其中包含表单的 HTTP 动作的欺骗值。例如,使用 [Blade 语法](https://www.kancloud.cn/tonyyu/laravel_5_6/786198): ~~~ <form method="POST"> {{ method_field('DELETE') }} </form> ~~~ #### `now()` `now` 函数为当前时间创建一个新的 `Illuminate\Support\Carbon` 实例: ~~~ $now = now(); ~~~ #### `old()` `old` 函数 [获取](https://www.kancloud.cn/tonyyu/laravel_5_6/786157#_146) 会话中闪存的 [旧输入](https://www.kancloud.cn/tonyyu/laravel_5_6/786157#_258) 值: ~~~ $value = old('value'); $value = old('value', 'default'); ~~~ #### `optional()` `optional` 函数可以接受任何参数,并且允许你访问该对象的属性或者调用方法。如果给定的对象是 `null`, 那么属性和方法会简单地返回 `null` 而不是产生一个错误: ~~~ return optional($user->address)->street; {!! old('name', optional($user)->name) !!} ~~~ #### `policy()` `policy` 方法为给定的类获取一个[策略](https://www.kancloud.cn/tonyyu/laravel_5_6/786218#_100)实例: ~~~ $policy = policy(App\User::class); ~~~ #### `redirect()` `redirect` 函数返回一个[重定向 HTTP 响应](https://www.kancloud.cn/tonyyu/laravel_5_6/786177#_98),如果没有没有传入参数,则返回重定向实例: ~~~ return redirect($to = null, $status = 302, $headers = [], $secure = null); return redirect('/home'); return redirect()->route('route.name'); ~~~ #### `report()` `report` 函数将使用[异常处理程序](https://www.kancloud.cn/tonyyu/laravel_5_6/786182#_12)的 report 方法抛出异常: ~~~ report($e); ~~~ #### `request()` `request` 函数返回当前[请求](https://www.kancloud.cn/tonyyu/laravel_5_6/786157)实例或者获取输入项: ~~~ $request = request(); $value = request('key', $default); ~~~ #### `rescue()` `rescue` 函数执行给定的闭包并捕获执行期间发生的任何异常。所有被捕获的异常将被发送到你的[异常处理程序](https://www.kancloud.cn/tonyyu/laravel_5_6/786182#_12)的 `report` 方法。要注意的是,该请求将继续处理: ~~~ return rescue(function () { return $this->method(); }); ~~~ 你也可以将第二个参数传递给 `rescue` 方法。如果在执行闭包时发生异常,这个参数将是应该返回的默认值: ~~~ return rescue(function () { return $this->method(); }, false); return rescue(function () { return $this->method(); }, function () { return $this->failure(); }); ~~~ #### `resolve()` `resolve` 函数使用[服务容器](https://www.kancloud.cn/tonyyu/laravel_5_6/786056)将给定的类或接口名称解析为其实例: ~~~ $api = resolve('HelpSpot\API'); ~~~ #### `response()` `response` 函数创建[响应](https://www.kancloud.cn/tonyyu/laravel_5_6/786177)实例或者获取响应工厂实例: ~~~ return response('Hello World', 200, $headers); return response()->json(['foo' => 'bar'], 200, $headers); ~~~ #### `retry()` `retry` 函数尝试执行给定的回调,直到到达给定的最大尝试次数。如果回调没有抛出异常,则返回值将被返回。如果回调抛出异常,它将自动重试。如果超过最大尝试次数,则会抛出异常: ~~~ return retry(5, function () { // 在 100ms 左右尝试 5 次... }, 100); ~~~ #### `session()` `session` 函数可以用来获取或者设置 [Session](https://www.kancloud.cn/tonyyu/laravel_5_6/786180) 值: ~~~ $value = session('key'); ~~~ 你可以通过将一组键/值对传递给该函数来设置值: ~~~ session(['chairs' => 7, 'instruments' => 3]); ~~~ 如果没有传递值给函数,则返回 Session 实例: ~~~ $value = session()->get('key'); session()->put('key', $value); ~~~ #### `tap()` `tap` 函数接受两个参数:一个任意的 `$value` 和一个闭包。`$value` 将被传递给闭包,然后由 `tap` 函数返回。不需要在闭包中使用 `return` 返回值。 ~~~ $user = tap(User::first(), function ($user) { $user->name = 'taylor'; $user->save(); }); ~~~ 如果没有闭包被传递给 `tap` 函数,你可以调用给定 `$value` 的任何方法。而你调用的方法的返回值始终为 `$value` ,无论方法在其定义中实际返回的是什么。例如,Eloquent 的 `update` 方法通常会返回一个整数。但是,我们可以强制通过 `tap` 函数链式调用 `update` 方法来返回模型本身: ~~~ $user = tap($user)->update([ 'name' => $name, 'email' => $email, ]); ~~~ #### `today()` `today` 函数为当前日期创建一个新的 `Illuminate\Support\Carbon` 实例: ~~~ $today = today(); ~~~ #### `throw_if()` 如果给定的布尔表达式计算结果为 `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()` 如果给定的布尔表达式计算结果为 `false`,则 `throw_unless` 函数会抛出给定的异常: ~~~ throw_unless(Auth::user()->isAdmin(), AuthorizationException::class); throw_unless( Auth::user()->isAdmin(), AuthorizationException::class, 'You are not allowed to access this page' ); ~~~ #### `trait_uses_recursive()` `trait_uses_recursive` 函数返回一个类使用的所有 trait: ~~~ $traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class); ~~~ #### `transform()` 如果给定的值不为 [blank](#blank_1224) 并且返回 `Closure`,那么 `transform` 函数对给定的值执行 `Closure` 并返回其结果: ~~~ $callback = function ($value) { return $value * 2; }; $result = transform(5, $callback); // 10 ~~~ 默认值或 `Closure` 也可以作为方法的第三个参数传递。如果给定值为空白,则返回该值: ~~~ $result = transform(null, $callback, 'The value is blank'); // The value is blank ~~~ #### `validator()` `validator` 函数用给定的参数创建一个新的[验证器](https://www.kancloud.cn/tonyyu/laravel_5_6/786181)实例。为方便起见,你可以使用它来代替 `Validator` facade : ~~~ $validator = validator($data, $rules, $messages); ~~~ #### `value()` `value` 函数返回给定的值。但是,如果将一个 `Closure` 传递给该函数,则将执行该 `Closure` 并返回其结果: ~~~ $result = value(true); // true $result = value(function () { return false; }); // false ~~~ #### `view()` `view` 函数获取一个[视图](https://www.kancloud.cn/tonyyu/laravel_5_6/786178)实例: ~~~ return view('auth.login'); ~~~ #### `with()` `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 ~~~