回到最上方

文件

請求及輸入
(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())
{
    //
}

討論