輔助函式
介紹
Laravel 包含了各式各樣的全域「輔助」PHP 函式。很多函式都有在框架本身使用到。如果你也覺得很方便的話,可以在應用程式中隨意的使用它們。
可用的方法
陣列與物件
array_add array_collapse array_divide array_dot array_except array_first array_flatten array_forget array_get array_has array_last array_only array_pluck array_prepend array_pull array_random array_set array_sort array_sort_recursive array_where array_wrap data_fill data_get data_set head last
路徑
字串
__ camel_case class_basename e ends_with kebab_case preg_replace_array snake_case starts_with str_after str_before str_contains str_finish str_is str_limit str_plural str_random str_replace_array str_replace_first str_replace_last str_singular str_slug str_start studly_case title_case trans trans_choice
URL
其它
abort abort_if abort_unless app auth back bcrypt blank broadcast cache class_uses_recursive collect config cookie csrf_field csrf_token dd decrypt dispatch dispatch_now dump encrypt env event factory filled info logger method_field now old optional policy redirect report request rescue resolve response retry session tap today throw_if throw_unless trait_uses_recursive transform validator value view with
方法清單
陣列與物件
array_add()
如果指定的 key 在陣列中不存在,array_add
函式就會把指定的 key / value 新增到陣列中:
$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
函式會回傳兩組陣列,一組是原本陣列的鍵,另一組是原本陣列的值:
list($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)
你還可以指定該方法回傳的項目數量作為可選的第二個參數。請注意,一旦使用了該參數,其回傳的結果一定是陣列,縱使你只需要它回傳一個項目也一樣:
$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
函式會使用 PHP 的 sort
函式來為一組陣列做一次遞迴排序:
$array = [
['Roman', 'Taylor', 'Li'],
['PHP', 'Ruby', 'JavaScript'],
];
$sorted = array_sort_recursive($array);
/*
[
['JavaScript', 'PHP', 'Ruby'],
['Li', 'Roman', 'Taylor'],
]
*/
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']
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
函式來產生一個在 database 目錄中給定檔案的完整路徑:
$path = database_path();
$path = database_path('factories/UserFactory.php');
mix()
mix
函式會回傳一個版控化的 Mix 檔案路徑:
$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
函式來產生一個在 resources 目錄中給定檔案的完整路徑:
$path = resource_path();
$path = resource_path('assets/sass/app.scss');
storage_path()
storage_path
函式會回傳 storage
目錄的完整路徑。你也可以使用 storage_path
函式來產生一個在 storage 目錄中給定檔案的完整路徑:
$path = storage_path();
$path = storage_path('app/file.txt');
字串
__()
__
函式會使用本地化檔案來翻譯給定的語系字串或語系鍵:
echo __('Welcome to our application');
echo __('messages.welcome');
如果被指定的語系字串或鍵不存在的話,__
函式只會回傳給定的值。所以,以上面的範例來說,__
方法如果找不到語系字串時就會直接回傳 messages.welcome
字串。
camel_case()
camel_case
函式會將給定字串轉換成駝峰式命名
:
$converted = camel_case('foo_bar');
// fooBar
class_basename()
class_basename
回傳不包含命名空間的類別名稱:
$class = class_basename('Foo\Bar\Baz');
// Baz
e()
e
函式會去執行 PHP 的 htmlspecialchars
函式,並將 double_encode
選項設為 false
:
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
函式可以將給定字串轉換成 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);
// The event will take place between 8:30 and 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_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 = 'The event will take place between ? and ?';
$replaced = str_replace_array('?', ['8:30', '9:00'], $string);
// The event will take place between 8:30 and 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
函式可以將給定字串轉換成 StudlyCas
:
$converted = studly_case('foo_bar');
// FooBar
title_case()
title_case
函式可以將給定字串轉換成 Title Case
:
$converted = title_case('a nice title uses the correct case');
// A Nice Title Uses The Correct Case
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
。
URL
action()
action
函式可以為給定的控制器行為產生一個 URL。你不需要傳入控制器的完整命名空間,而是傳入相對於 App\Http\Controllers
命名空間的控制器類別名稱:
$url = action('HomeController@index');
如果該方法需要接受的路由參數,可以將一組陣列傳入該方法的第二個參數。
$url = action('UserController@profile', ['id' => 1]);
asset()
asset
函式可以產生一組使用當前請求協定(HTTP 或 HTTPS)的資源檔網址:
$url = asset('img/photo.jpg');
secure_asset()
secure_asset
函式可以產生一組使用 HTTPS 的資源檔網址:
$url = secure_asset('img/photo.jpg');
route()
route
函式會使用指定路由名稱來產生一組網址:
$url = route('routeName');
如果該路由需要接受參數,你可以將一組陣列傳入該方法:
$url = route('routeName', ['id' => 1]);
預設的 route
函式會產生一組絕對路徑的路由。如果你想要產生一組相對路徑的網址,你可以將 false
傳入該方法的第三個參數:
$url = route('routeName', ['id' => 1], false);
secure_url()
secure_url
函式可以為給定路徑產生一組完整的 HTTPS 網址:
$url = secure_url('user/profile');
$url = secure_url('user/profile', [1]);
url()
url
函式可以為給定路徑產生一組完整的 HTTP 網址:
$url = url('user/profile');
$url = url('user/profile', [1]);
如果沒有提供路徑給方法,則會回傳 Illuminate\Routing\UrlGenerator
實例:
$current = url()->current();
$full = url()->full();
$previous = url()->previous();
其它
abort()
abort
函式會使用例外處理器來渲染並回應一件 HTTP 例外:
abort(403);
你還可以為例外的回應提供額外的文字內容與自訂標頭:
abort(403, 'Unauthorized.', $headers);
abort_if()
abort_if
函式會在給定布林表達式的結果為 ture
時,回應一件 HTTP 例外:
abort_if(! Auth::user()->isAdmin(), 403);
就像是使用 abort
方法,你還可以提供例外的回應文字內容作為第三個參數,並提供一組自訂回應標頭的陣列作為第四個參數。
abort_unless()
abort_unless
函式會在給定布林表達式結果為 false
時,回應一件 HTTP 例外:
abort_unless(Auth::user()->isAdmin(), 403);
就像是使用 abort
方法,你還可以提供例外的回應文字內容作為第三個參數,並提供一組自訂回應標頭的陣列作為第四個參數。
app()
app
函式可以回傳服務容器的實例:
$container = app();
你可以傳入一個類別或介面名稱來使用服務容器解析功能:
$api = app('HelpSpot\API');
auth()
auth
函式可以回傳認證功能的實例。可以用來取代 Auth
Facade 來更方便的使用:
$user = auth()->user();
如果你有需要,可以指定想要存取的 Guard 實例:
$user = auth('admin')->user();
back()
back
函式可以產生一個重導 HTTP 回應來讓使用者回到前一個瀏覽的位置:
return back($status = 302, $headers = [], $fallback = false);
return back();
bcrypt()
bcrypt
函式使用 Bcrypt 來雜湊給定的值。你可以使用這個函式來取代 Hash
Facade:
$password = bcrypt('my-secret-password');
broadcast()
broadcast(new UserRegistered($user));
blank()
blank
函式回傳給定值是否為「空值」:
blank('');
blank(' ');
blank(null);
blank(collect());
// true
blank(0);
blank(true);
blank(false);
// false
blank
的另一個相反的方法為 filled
。
cache()
cache
函式可以被用來從快取中取得值。如果在快取中沒有給定的鍵,就會回傳自訂的預設值:
$value = cache('key');
$value = cache('key', 'default');
你可以將一組鍵值對傳入該函式來把它新增到快取中。你還能傳入快取值的有效與持續時間:
cache(['key' => 'value'], 5);
cache(['key' => 'value'], Carbon::now()->addSeconds(10));
class_uses_recursive()
class_uses_recursive
函式會回傳一個類別使用的所有 trait,也包含任何子類別所用的 trait:
$traits = class_uses_recursive(App\User::class);
collect()
collect
函式可以從給定值中建立一個 collection 實例:
$collection = collect(['taylor', 'abigail']);
config()
config
函式可以取得系統設定的變數值。可以使用「點」語法來存取系統設定值,這還包括了檔案名稱和你想要存取的選項。如果設定選項不存在,則可以回傳一個指定的預設值:
$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
函式可以產生一組 hidden
輸入欄位,並包含了 CSRF token 的值。例如,使用 Blade 語法:
{{ csrf_field() }}
csrf_token()
csrf_token
函式可以取得當前 CSRF token 的值:
$token = csrf_token();
dd()
dd
函式會印出給定變數並結束腳本執行:
dd($value);
dd($value1, $value2, $value3, ...);
如果你不想中斷腳本的執行,請改使用 dump
函式。
decrypt()
decrypt
函式會使用 Laravel 的解密器來解密給定的值:
$decrypted = decrypt($encrypted_value);
dispatch()
dispatch
函式可以將給定的任務推送到 Laravel 任務隊列:
dispatch(new App\Jobs\SendEmails);
dispatch_now()
dispatch_now
函式會馬上執行給定的任務並從 handle
方法中回傳結果:
$result = dispatch_now(new App\Jobs\SendEmails);
dump()
dump
函式可以印出給定的變數:
dump($value);
dump($value1, $value2, $value3, ...);
如果你想要在印出變數以後,馬上中斷腳本的執行。請改用 dd
函式。
encrypt()
encrypt
函式會使用 Laravel 加密器來加密給定的值:
$encrypted = encrypt($unencrypted_value);
env()
env
函式可以取得一個環境變數的值或回傳一個預設值:
$env = env('APP_ENV');
// 回傳 'production',因為沒有設定 APP_ENV...
$env = env('APP_ENV', 'production');
event()
event
函式可以調度給定的事件到它的監聽器:
event(new UserRegistered($user));
factory()
factory
函式可以為給定類別、名稱和數量建立一個模型工廠建構器。它能被用在測試或資料填充:
$user = factory(App\User::class)->make();
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]);
如果沒有值可以傳入該函式,將會回傳 logger 實例:
logger()->error('You are not allowed here.');
method_field()
method_field
函式產生擬造 HTTP 表單動作內容的 HTML 表單隱藏欄位。例如,請使用 Blade 語法:
<form method="POST">
{{ method_field('DELETE') }}
</form>
now()
now
函式可以為當前時間建立一個 Illuminate\Support\Carbon
實例:
$now = now();
old()
old
函式可以取得快閃到 session 的舊有輸入數值:
$value = old('value');
$value = old('value', 'default');
optional()
optional
函式接受任何參數,並可以讓你存取物件的屬性或呼叫的方法。如果給定的物件為 null
,則屬性和方法也會只回傳 null
而不是回傳錯誤:
return optional($user->address)->street;
{!! old('name', optional($user)->name) !!}
policy()
policy
方法可以為給定類別取得一個 policy 實例:
$policy = policy(App\User::class);
redirect()
redirect
函式可以回傳一個重導 HTTP 回應,或在沒有參數的情況下回傳重導器實例:
return redirect($to = null, $status = 302, $headers = [], $secure = null);
return redirect('/home');
return redirect()->route('route.name');
report()
report
函式會使用例外處理器的 report
方法來回報一個例外:
report($e);
request()
request
函式可以回傳當前請求的實例或取得一個輸入項目:
$request = request();
$value = request('key', $default = null);
rescue()
rescue
函式會執行給定的閉包並捕捉執行過程中的任何例外。所有捕捉到的例外會被傳送到你的例外處理器的 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
函式使用服務容器將給定的類別或介面名稱解析到它的實例:
$api = resolve('HelpSpot\API');
response()
response
函式可以建立一個回應實例或取得一個回應工廠的實例:
return response('Hello World', 200, $headers);
return response()->json(['foo' => 'bar'], 200, $headers);
retry()
retry
函式會嘗試執行給定的回呼,直到給定的最長嘗試次數為止。如果回呼沒有拋出例外,就會回傳它的回傳值。如果回呼拋出例外,就會自動重試。如果超過最大嘗試次數,就會拋出例外:
return retry(5, function () {
// 嘗試五次並間隔 100ms ...
}, 100);
session()
session
函式可被用在取得或設定 session 的值:
$value = session('key');
你可以使用一組鍵值對傳入該函式來設定值:
session(['chairs' => 7, 'instruments' => 3]);
該函式在沒有內容傳遞時,將回傳所儲存的 seesion 內容:
$value = session()->get('key');
session()->put('key', $value);
tap()
tap
函式接受兩組參數:其一為任意的 $value
,另一個為一個閉包。$value
會被傳入到閉包中,然後被 tap
函數所回傳。閉包不能將結果回傳給函式:
$user = tap(User::first(), function ($user) {
$user->name = 'taylor';
$user->save();
});
如果沒有閉包要被傳入 tap
函式,那麼可以呼叫在給定的 $value
上的任何方法。不論該方法實際回傳了什麼值,你呼叫的方法最終都會回傳 $value
。例如,Eloquent 的 update
方法一般會回傳一個整數。然而,我們能強制該方法通過 tap
函式鏈結呼叫 update
方法來回傳模型身:
$user = tap($user)->update([
'name' => $name,
'email' => $email,
]);
today()
today
函式可以為當前日期建立一個新的 Illuminate\Support\Carbon
實例:
$today = today();
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'
);
trait_uses_recursive()
trait_uses_recursive
函式可以回傳 trait 所用到的所有 trait:
$traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);
transform()
transform
函式會先判斷給定的值是否為空白,若不是空白則去執行閉包
,並回傳該閉包
的結果:
$callback = function ($value) {
return $value * 2;
};
$result = transform(5, $callback);
// 10
也可以使用預設值或閉包
作為傳入該方法的第三個參數。這個值會在第一個參數值為空白時回傳它:
$result = transform(null, $callback, 'The value is blank');
// The value is blank
validator()
validator
函式可以建立一個新的驗證器實例與給定的參數。你可以使用它來取代 Validator
Facade:
$validator = validator($data, $rules, $messages);
value()
value
函式會回傳給定的值。然而,如果你是傳入一個閉包
到該函式,則會執行閉包
,並回傳它的結果:
$result = value(true);
// true
$result = value(function () {
return false;
});
// false
view()
view
函式可以接受一個視圖實例:
return view('auth.login');
with()
with
函式會回傳給定的值。若將閉包
作為傳入該函式的第二個參數,則會執行閉包
,並回傳它的結果:
$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