[TOC]
### **1、簡介**
[Laravel](http://laravelacademy.org/tags/laravel "View all posts in Laravel")?自帶了一系列 PHP?[輔助函數](http://laravelacademy.org/tags/%e8%be%85%e5%8a%a9%e5%87%bd%e6%95%b0 "View all posts in 輔助函數"),很多被框架自身使用,如果你覺得方便的話也可以在代碼中使用它們。
### **2、?[數組](http://laravelacademy.org/tags/%e6%95%b0%e7%bb%84 "View all posts in 數組")函數**
#### 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`?函數返回兩個數組,一個包含原數組的所有鍵,另外一個包含原數組的所有值:
~~~
list($keys, $values) = array_divide(['name' => 'Desk']);
// $keys: ['name']
// $values: ['Desk']
~~~
#### array_dot()
`array_dot`?函數使用”.”號將將多維數組轉化為一維數組:
~~~
$array = array_dot(['foo' => ['bar' => 'baz']]);
// ['foo.bar' => 'baz'];
~~~
#### array_except()
`array_except`?方法從數組中移除給定鍵值對:
~~~
$array = ['name' => 'Desk', 'price' => 100];
$array = array_except($array, ['price']);
// ['name' => 'Desk']
~~~
#### array_first()
`array_first`?方法返回通過測試數組的第一個元素:
~~~
$array = [100, 200, 300];
$value = array_first($array, function ($key, $value) {
return $value >= 150;});
// 200
~~~
默認值可以作為第三個參數傳遞給該方法,如果沒有值通過測試的話返回默認值:
~~~
$value = array_first($array, $callback, $default);
~~~
#### array_flatten()
`array_flatten`?方法將多維數組轉化為一維數組:
~~~
$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];
$array = 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]]];
$value = array_get($array, 'products.desk');
// ['price' => 100]
~~~
`array_get`?函數還接收一個默認值,如果指定鍵不存在的話則返回該默認值:
~~~
$value = array_get($array, 'names.john', 'default');
~~~
#### array_only()
`array_only`?方法只從給定數組中返回指定鍵值對:
~~~
$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
$array = array_only($array, ['name', 'price']);
// ['name' => 'Desk', 'price' => 100]
~~~
#### array_pluck()
`array_pluck`?方法從數組中返回給定鍵對應的鍵值對列表:
~~~
$array = [
['developer' => ['name' => 'Taylor']],
['developer' => ['name' => 'Abigail']]];
$array = array_pluck($array, 'developer.name');
// ['Taylor', 'Abigail'];
~~~
你還可以指定返回結果的鍵:
~~~
$array = 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');
// $array: ['zero', 'one', 'two', 'three', 'four']
~~~
#### array_pull()
`array_pull`?方法從數組中返回并移除鍵值對:
~~~
$array = ['name' => 'Desk', 'price' => 100];
$name = array_pull($array, 'name');
// $name: Desk
// $array: ['price' => 100]
~~~
#### 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 = [
['name' => 'Desk'],
['name' => 'Chair'],
];
$array = array_values(array_sort($array, function ($value) {
return $value['name'];
}));
/*
[
['name' => 'Chair'],
['name' => 'Desk'],
]
*/
~~~
#### array_sort_recursive()
`array_sort_recursive`?函數使用?`sort`?函數對數組進行遞歸排序:
~~~
$array = [
[
'Roman',
'Taylor',
'Li',
],
[
'PHP',
'Ruby',
'JavaScript',
],
];
$array = array_sort_recursive($array);
/*
[
[
'Li',
'Roman',
'Taylor',
],
[
'JavaScript',
'PHP',
'Ruby',
]
];
*/
~~~
#### array_where()
`array_where`?函數使用給定閉包對數組進行過濾:
~~~
$array = [100, '200', 300, '400', 500];
$array = array_where($array, function ($key, $value) {
return is_string($value);
});
// [1 => 200, 3 => 400]
~~~
#### head()
`head`?函數只是簡單返回給定數組的第一個元素:
~~~
$array = [100, 200, 300];
$first = head($array);
// 100
~~~
#### last()
`last`?函數返回給定數組的最后一個元素:
~~~
$array = [100, 200, 300];
$last = last($array);
// 300
~~~
### **3、[路徑](http://laravelacademy.org/tags/%e8%b7%af%e5%be%84 "View all posts in 路徑")函數**
#### app_path()
`app_path`?函數返回?`app`?目錄的絕對路徑:
~~~
$path = app_path();
~~~
你還可以使用?`app_path`?函數為相對于?`app`?目錄的給定文件生成絕對路徑:
~~~
$path = app_path('Http/Controllers/Controller.php');
~~~
#### base_path()
`base_path`?函數返回項目根目錄的絕對路徑:
~~~
$path = base_path();
~~~
你還可以使用?`base_path`?函數為相對于應用目錄的給定文件生成絕對路徑:
~~~
$path = base_path('vendor/bin');
~~~
#### config_path()
`config_path`?函數返回應用配置目錄的絕對路徑:
~~~
$path = config_path();
~~~
#### database_path()
`database_path`?函數返回應用數據庫目錄的絕對路徑:
~~~
$path = database_path();
~~~
#### elixir()
`elixir`?函數返回版本控制的Elixir文件所在路徑:
~~~
elixir($file);
~~~
#### public_path()
`public_path`?函數返回?`public`?目錄的絕對路徑:
~~~
$path = public_path();
~~~
#### storage_path()
`storage_path`?函數返回?`storage`?目錄的絕對路徑:
~~~
$path = storage_path();
~~~
還可以使用?`storage_path`?函數生成相對于?`storage`?目錄的給定文件的絕對路徑:
~~~
$path = storage_path('app/file.txt');
~~~
### **4、[字符串](http://laravelacademy.org/tags/%e5%ad%97%e7%ac%a6%e4%b8%b2 "View all posts in 字符串")函數**
#### camel_case()
`camel_case`?函數將給定字符串轉化為按駝峰式命名規則的字符串:
~~~
$camel = camel_case('foo_bar');
// fooBar
~~~
#### class_basename()
`class_basename`?返回給定類移除命名空間后的類名:
~~~
$class = class_basename('Foo\Bar\Baz');
// Baz
~~~
#### e()
`e`?函數在給定字符串上運行?`htmlentities`:
~~~
echo e('<html>foo</html>');
// <html>foo</html>
~~~
#### ends_with()
`ends_with`?函數判斷給定字符串是否以給定值結尾:
~~~
$value = ends_with('This is my name', 'name');
// true
~~~
#### snake_case()
`snake_case`?函數將給定字符串轉化為下劃線分隔的字符串:
~~~
$snake = snake_case('fooBar');
// foo_bar
~~~
#### str_limit()
`str_limit`?函數限制輸出字符串的數目,該方法接收一個字符串作為第一個參數以及該字符串最大輸出字符數作為第二個參數:
~~~
$value = str_limit('The PHP framework for web artisans.', 7);
// The PHP...
~~~
#### starts_with()
`starts_with`?函數判斷給定字符串是否以給定值開頭:
~~~
$value = starts_with('This is my name', 'This');
// true
~~~
#### str_contains()
`str_contains`?函數判斷給定字符串是否包含給定值:
~~~
$value = str_contains('This is my name', 'my');
// true
~~~
#### str_finish()
`str_finish`?函數添加字符到字符串結尾:
~~~
$string = str_finish('this/string', '/');
// this/string/
~~~
#### str_is()
`str_is`?函數判斷給定字符串是否與給定模式匹配,星號可用于表示通配符:
~~~
$value = str_is('foo*', 'foobar');
// true
$value = str_is('baz*', 'foobar');
// false
~~~
#### 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`?函數通過指定長度生成隨機字符串:
~~~
$string = str_random(40);
~~~
#### str_singular()
`str_singular`?函數將字符串轉化為單數形式,該函數目前只支持英文:
~~~
$singular = str_singular('cars');
// car
~~~
#### str_slug()
`str_slug`?函數將給定字符串生成[URL](http://laravelacademy.org/tags/url "View all posts in URL")友好的格式:
~~~
$title = str_slug("Laravel 5 Framework", "-");
// laravel-5-framework
~~~
#### studly_case()
`studly_case`?函數將給定字符串轉化為單詞開頭字母大寫的格式:
~~~
$value = studly_case('foo_bar');
// FooBar
~~~
#### trans()
`trans`?函數使用本地文件翻譯給定語言行:
~~~
echo trans('validation.required'):
~~~
#### trans_choice()
`trans_choice`?函數翻譯帶拐點的給定語言行:
~~~
$value = trans_choice('foo.bar', $count);
~~~
### **5、URL函數**
#### action()
`action`?函數為給定[控制器](http://laravelacademy.org/post/2816.html)動作生成URL,你不需要傳遞完整的命名空間到該控制器,傳遞相對于命名空間`App\Http\Controllers`?的類名即可:
~~~
$url = action('HomeController@getIndex');
~~~
如果該方法接收路由參數,你可以將其作為第二個參數傳遞進來:
~~~
$url = action('UserController@profile', ['id' => 1]);
~~~
#### asset()
使用當前請求的 scheme(HTTP或HTTPS)為前端資源生成一個URL:
~~~
$url = asset('img/photo.jpg');
~~~
#### secure_asset()
使用 HTTPS 為前端資源生成一個 URL:
~~~
echo secure_asset('foo/bar.zip', $title, $attributes = []);
~~~
#### route()
`route`?函數為給定[命名路由](http://laravelacademy.org/post/2784.html#named-route)生成一個URL:
~~~
$url = route('routeName');
~~~
如果該路由接收參數,你可以將其作為第二個參數傳遞進來:
~~~
$url = route('routeName', ['id' => 1]);
~~~
#### url()
`url`?函數為給定路徑生成絕對路徑:
~~~
echo url('user/profile');
echo url('user/profile', [1]);
~~~
如果沒有提供路徑,將會返回?`Illuminate\Routing\UrlGenerator`?實例:
~~~
echo url()->current();
echo url()->full();
echo url()->previous();
~~~
### **6、其它函數**
#### auth()
`auth`?函數返回一個認證器實例,為方便起見你可以用其取代?`Auth`?門面:
~~~
$user = auth()->user();
~~~
#### back()
`back`?函數生成重定向響應到用戶前一個位置:
~~~
return back();
~~~
#### bcrypt()
`bcrypt`?函數使用Bcrypt對給定值進行[哈希](http://laravelacademy.org/post/3208.html),你可以用其替代?`Hash`?門面:
~~~
$password = bcrypt('my-secret-password');
~~~
#### collect()
`collect`?函數會根據提供的數據項創建一個集合:
~~~
$collection = collect(['taylor', 'abigail']);
~~~
#### config()
`config`?函數獲取配置變量的值,配置值可以通過使用”.”號訪問,包含文件名以及你想要訪問的選項。如果配置選項不存在的話默認值將會被指定并返回:
~~~
$value = config('app.timezone');
$value = config('app.timezone', $default);
~~~
輔助函數?`config`?還可以用于在運行時通過傳遞鍵值對數組設置配置變量值:
~~~
config(['app.debug' => true]);
~~~
#### csrf_field()
`csrf_field`?函數生成一個包含 CSRF 令牌值的 HTML 隱藏域,例如,使用[Blade語法](http://laravelacademy.org/post/2865.html):
~~~
{!! csrf_field() !!}
~~~
#### csrf_token()
`csrf_token`?函數獲取當前 CSRF 令牌的值:
~~~
$token = csrf_token();
~~~
#### dd()
`dd`?函數輸出給定變量值并終止腳本執行:
~~~
dd($value);
~~~
#### dispatch()
`dispatch`?函數推送一個新的任務到Laravel任務隊列:
~~~
dispatch(new App\Jobs\SendEmails);
~~~
#### env()
`env`?函數獲取環境變量值或返回默認值:
~~~
$env = env('APP_ENV');
// Return a default value if the variable doesn't exist...
$env = env('APP_ENV', 'production');
~~~
#### event()
`event`?函數分發給定[事件](http://laravelacademy.org/post/3162.html)到對應監聽器:
~~~
event(new UserRegistered($user));
~~~
#### factory()
`factory`?函數為給定類、名稱和數量創建模型工廠構建器,可用于測試或[數據填充](http://laravelacademy.org/post/2976.html):
~~~
$user = factory('App\User')->make();
~~~
#### method_field()
`method_field`?函數生成包含HTTP請求方法的HTML隱藏域,例如:
~~~
<form method="POST">
{!! method_field('delete') !!}</form>
~~~
#### old()
`old`?函數獲取一次性存放在 Session 中的值:
~~~
$value = old('value');
$value = old('value', 'default');
~~~
#### redirect()
`redirect`?函數返回重定向器實例進行[重定向](http://laravelacademy.org/post/2836.html#redirect):
~~~
return redirect('/home');
~~~
#### request()
`request`?函數返回當前請求實例或者獲取一個輸入項:
~~~
$request = request();$value = request('key', $default = null)
~~~
#### response()
`response`?函數創建一個[響應](http://laravelacademy.org/post/2836.html)實例或者獲取響應工廠實例:
~~~
return response('Hello World', 200, $headers);
return response()->json(['foo' => 'bar'], 200, $headers)
~~~
#### session()
`session`?函數可以用于獲取/設置 Session 值:
~~~
$value = session('key');
~~~
可以通過傳遞鍵值對數組到該函數的方式設置 Session 值:
~~~
session(['chairs' => 7, 'instruments' => 3]);
~~~
如果沒有傳入參數到?`session`?函數則返回 Session 存儲器對象實例:
~~~
$value = session()->get('key');session()->put('key', $value);
~~~
#### value()
`value`?函數返回給定的值,然而,如果你傳遞一個閉包到該函數,該閉包將會被執行并返回執行結果:
~~~
$value = value(function() { return 'bar'; });
~~~
#### view()
`view`?函數獲取一個[視圖](http://laravelacademy.org/post/2855.html)實例:
~~~
return view('auth.login');
~~~
#### with()
`with`?函數返回給定的值,該函數在方法鏈中特別有用,別的地方就沒什么用了:
~~~
$value = with(new Foo)->work();
~~~
- 序言
- 發行版本說明
- 升級指南
- 貢獻代碼
- 開始
- 安裝
- 配置
- Laravel Homestead
- 基礎
- HTTP 路由
- HTTP 中間件
- HTTP 控制器
- HTTP 請求
- HTTP 響應
- 視圖
- Blade 模板引擎
- 架構
- 一次請求的生命周期
- 應用目錄結構
- 服務提供者
- 服務容器
- 門面(Facades)
- 數據庫
- 起步
- 查詢構建器
- 遷移
- 填充數據
- Eloquent ORM
- 起步
- 關聯關系
- 集合
- 訪問器&修改器
- 序列化
- 服務
- 用戶認證
- 用戶授權
- Artisan Console
- 訂閱支付實現:Laravel Cashier
- 緩存
- 集合
- 集成前端資源:Laravel Elixir
- 加密
- 錯誤&日志
- 事件
- 文件系統/云存儲
- 哈希
- 輔助函數
- 本地化
- 郵件
- 包開發
- 分頁
- Redis
- 隊列
- Session
- Envoy Task Runner
- 任務調度
- 測試
- 驗證
- 新手入門指南
- 簡單任務管理系統
- 帶用戶功能的任務管理系統