* * * * *
[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 文件](http://www.hmoore.net/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');
~~~
## 字符串
#### `__()`
`__`?函數使用你的?[本地化文件](http://www.hmoore.net/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`?函數使用你的?[本地化文件](http://www.hmoore.net/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`?函數拋出?[異常處理](http://www.hmoore.net/tonyyu/laravel_5_6/786182#_12)?程序呈現的?[HTTP 異常](http://www.hmoore.net/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`?函數返回?[服務容器](http://www.hmoore.net/tonyyu/laravel_5_6/786056)?實例:
~~~
$container = app();
~~~
你可以傳遞一個類或接口名稱來從容器中解析它:
~~~
$api = app('HelpSpot\API');
~~~
#### `auth()`
`auth`?函數返回一個?[認證](http://www.hmoore.net/tonyyu/laravel_5_6/786216)?實例。為了方便起見,你可以使用它來替代?`Auth`?Facade:
~~~
$user = auth()->user();
~~~
如果需要,你可以指定你想要訪問的認證實例:
~~~
$user = auth('admin')->user();
~~~
#### `back()`
`back`?函數生成一個[重定向 HTTP 響應](http://www.hmoore.net/tonyyu/laravel_5_6/786177#_98)到用戶之前的位置:
~~~
return back($status = 302, $headers = [], $fallback = false);
return back();
~~~
#### `bcrypt()`
`bcrypt`?[哈希](http://www.hmoore.net/tonyyu/laravel_5_6/786220)?使用 Bcrypt 對給定的值進行散列。你可以使用它替代?`Hash`?facade:
~~~
$password = bcrypt('my-secret-password');
~~~
#### `broadcast()`
`broadcast`?函數將[廣播](http://www.hmoore.net/tonyyu/laravel_5_6/786239)給定的[事件](http://www.hmoore.net/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`?函數可以用來從[緩存](http://www.hmoore.net/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`?函數根據給定的數組創建一個[集合](http://www.hmoore.net/tonyyu/laravel_5_6/786241)實例:
~~~
$collection = collect(['taylor', 'abigail']);
~~~
#### `config()`
`config`?函數獲取[配置](http://www.hmoore.net/tonyyu/laravel_5_6/786051)變量的值。可以使用「點」語法訪問配置值,其中包括文件的名稱和希望訪問的選項。如果配置選項不存在,則可以指定一個默認值并返回:
~~~
$value = config('app.timezone');
$value = config('app.timezone', $default);
~~~
可以在運行時通過傳遞一組鍵/值對來設置配置變量:
~~~
config(['app.debug' => true]);
~~~
#### `cookie()`
`cookie`?函數創建一個新的?[cookie](http://www.hmoore.net/tonyyu/laravel_5_6/786157#Cookies_304)?實例:
~~~
$cookie = cookie('name', 'value', $minutes);
~~~
#### `csrf_field()`
`csrf_field`?函數生成包含 CSRF 令牌值的 HTML`hidden`?表單字段。例如,使用?[Blade 語法](http://www.hmoore.net/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 的[加密器](http://www.hmoore.net/tonyyu/laravel_5_6/786219)來解密給定的值:
~~~
$decrypted = decrypt($encrypted_value);
~~~
#### `dispatch()`
`dispatch`?函數將給定的[任務](http://www.hmoore.net/tonyyu/laravel_5_6/786248#_85)推送到 Laravel?[任務列隊](http://www.hmoore.net/tonyyu/laravel_5_6/786248)中:
~~~
dispatch(new App\Jobs\SendEmails);
~~~
#### `dispatch_now()`
`dispatch_now`?函數立即運行給定的[任務](http://www.hmoore.net/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 的[加密器](http://www.hmoore.net/tonyyu/laravel_5_6/786219)對給定的值進行加密:
~~~
$encrypted = encrypt($unencrypted_value);
~~~
#### `env()`
`env`?函數獲取[環境變量](http://www.hmoore.net/tonyyu/laravel_5_6/786051#_6)的值或者返回默認值:
~~~
$env = env('APP_ENV');
// 如果環境變量不存在則返回默認值...
$env = env('APP_ENV', 'production');
~~~
> {note} 如果在你在部署過程中執行?`config:cache`?命令,則應該保證只在配置中調用?`env`?函數。一旦配置被緩存,`.env`?文件則不會再被加載,所有對?`env`?函數的調用都將返回?`null`。
#### `event()`
`event`?函數將給定的[事件](http://www.hmoore.net/tonyyu/laravel_5_6/786242)分派給它的監聽器:
~~~
event(new UserRegistered($user));
~~~
#### `factory()`
`factory`?函數根據給定的類、名稱和數量創建一個模型工廠構建器。可以在[測試](http://www.hmoore.net/tonyyu/laravel_5_6/786284#_68)或[數據填充](http://www.hmoore.net/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`?函數將信息寫入[日志](http://www.hmoore.net/tonyyu/laravel_5_6/786183):
~~~
info('一些有用的信息!');
~~~
有前后關系的數組也可以傳遞給函數:
~~~
info('用戶登錄嘗試失敗。', ['id' => $user->id]);
~~~
#### `logger()`
`logger`?函數可以將一個?`debug`?級別的消息寫入到[日志](http://www.hmoore.net/tonyyu/laravel_5_6/786183)中:
~~~
logger('Debug 消息');
~~~
有前后關系的數組也可以傳遞給函數:
~~~
logger('User has logged in.', ['id' => $user->id]);
~~~
如果沒有傳值給函數則返回[日志](http://www.hmoore.net/tonyyu/laravel_5_6/786183)的實例:
~~~
logger()->error('You are not allowed here.');
~~~
#### `method_field()`
`method_field`?函數生成一個 HTML?`hidden`?表單字段,其中包含表單的 HTTP 動作的欺騙值。例如,使用?[Blade 語法](http://www.hmoore.net/tonyyu/laravel_5_6/786198):
~~~
<form method="POST">
{{ method_field('DELETE') }}
</form>
~~~
#### `now()`
`now`?函數為當前時間創建一個新的?`Illuminate\Support\Carbon`?實例:
~~~
$now = now();
~~~
#### `old()`
`old`?函數?[獲取](http://www.hmoore.net/tonyyu/laravel_5_6/786157#_146)?會話中閃存的?[舊輸入](http://www.hmoore.net/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`?方法為給定的類獲取一個[策略](http://www.hmoore.net/tonyyu/laravel_5_6/786218#_100)實例:
~~~
$policy = policy(App\User::class);
~~~
#### `redirect()`
`redirect`?函數返回一個[重定向 HTTP 響應](http://www.hmoore.net/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`?函數將使用[異常處理程序](http://www.hmoore.net/tonyyu/laravel_5_6/786182#_12)的 report 方法拋出異常:
~~~
report($e);
~~~
#### `request()`
`request`?函數返回當前[請求](http://www.hmoore.net/tonyyu/laravel_5_6/786157)實例或者獲取輸入項:
~~~
$request = request();
$value = request('key', $default);
~~~
#### `rescue()`
`rescue`?函數執行給定的閉包并捕獲執行期間發生的任何異常。所有被捕獲的異常將被發送到你的[異常處理程序](http://www.hmoore.net/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`?函數使用[服務容器](http://www.hmoore.net/tonyyu/laravel_5_6/786056)將給定的類或接口名稱解析為其實例:
~~~
$api = resolve('HelpSpot\API');
~~~
#### `response()`
`response`?函數創建[響應](http://www.hmoore.net/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](http://www.hmoore.net/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`?函數用給定的參數創建一個新的[驗證器](http://www.hmoore.net/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`?函數獲取一個[視圖](http://www.hmoore.net/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
~~~
- 前言
- 翻譯說明
- 發行說明
- 升級指南
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- Homestead
- Valet
- 部署
- 核心架構
- 請求周期
- 服務容器
- 服務提供者
- Facades
- Contracts
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- URL
- Session
- 表單驗證
- 錯誤
- 日志
- 前端開發
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全相關
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- API 資源
- 序列化
- 測試相關
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Scout 全文搜索
- Socialite 社會化登錄