請求及輸入
(Requests & Input)
基本輸入資訊
你可以透過很簡單的方式,去存取到所有使用者輸入的資料,你不需要擔心任何不同的 HTTP 存取方法 (GET、POST、PUT、DELETE),只要透過 Input 就可以存取到不同 HTTP 存取方法的資料了。
取得使用者傳入的資料
$name = Input::get('name');
取不到使用者傳入的資料時,設定資料的預設值
$name = Input::get('name', 'Sally');
判斷使用者傳入的資料是否存在
if (Input::has('name'))
{
//
}
取得所有使用者傳入任何 HTTP 請求的資料
$input = Input::all();
取得使用者輸入的部分資料
$input = Input::only('username', 'password');
$input = Input::except('credit_card');
某些 JavaScript 的函式庫會傳給應用程式 JSON 格式的資料,如 Backbone,你也可以透過 Input::get
去存取這些資料。
Cookies
在 Laravel 中的所有 cookies 資料都會被一個驗證碼經過加密,意思是如果 cookies 在 client 端被修改變更後,Laravel 會認為這個是不合法的 cookies。
取得 Cookie 資料
$value = Cookie::get('name');
在回應資料中加入 Cookie 資料
$response = Response::make('Hello World');
$response->withCookie(Cookie::make('name', 'value', $minutes));
建立一個永遠不會失效的 Cookie
$cookie = Cookie::forever('name', 'value');
舊輸入資訊
你或許在使用者做下一次的請求之前,需要保存使用者輸入過的資訊,舉例來說,你在使用者輸入資料後,對資料檢查時發現有誤時,在顯示資料的錯誤訊息外,你可能需要重新顯示使用者先前輸入過的資料。
將使用者輸入的資料存入 Session
Input::flash();
將使用者輸入的部分資料存入 Session
Input::flashOnly('username', 'email');
Input::flashExcept('password');
因為你可能需要在將使用者導回先前的頁面時,順便帶有使用者先前輸入過的資料,你可以透過簡單的 chain 的方式在先前的頁面使用這些資料。
return Redirect::to('form')->withInput();
return Redirect::to('form')->withInput(Input::except('password'));
備註: 你可以使用 Session 去存取在不同的請求中的資料
取得舊的資料
Input::old('username');
檔案
取得上傳的資料
$file = Input::file('photo');
判斷檔案是否已完成上傳
if (Input::hasFile('photo'))
{
//
}
file
方法回傳的物件是 Symfony\Component\HttpFoundation\File\UploadedFile
類別的實例,引用了 PHP SplFileInfo
類別去提供不同的方法去存取檔案。
移動上傳的檔案
Input::file('photo')->move($destinationPath);
Input::file('photo')->move($destinationPath, $fileName);
取得上傳檔案的路徑
$path = Input::file('photo')->getRealPath();
取得上傳檔案的大小
$size = Input::file('photo')->getSize();
取得上傳檔案的 MIME 類型
$mime = Input::file('photo')->getMimeType();
請求資訊
Request
類別提供許多的方法去檢查 HTTP 請求,並引用了 Symfony\Component\HttpFoundation\Request
類別,這裡有一些相關重點整理。
取得請求的 URI
$uri = Request::path();
判斷請求是否符合指定的模式
if (Request::is('admin/*'))
{
//
}
取得請求 URL
$url = Request::url();
取得請求 URI 的片段
$segment = Request::segment(1);
取得請求標頭
$value = Request::header('Content-Type');
從 $_SERVER 取得資料
$value = Request::server('PATH_INFO');
判斷是否使用 AJAX 去請求資料
if (Request::ajax())
{
//
}
判斷是否透過 HTTPS 去請求資料
if (Request::secure())
{
//
}