1. 程式人生 > >Laravel 5.5 Request

Laravel 5.5 Request

Request(請求)

$path = $request->path();  // 獲取請求路徑
$request->is('user/*');  // 驗證請求路徑是否與給定模式匹配,該方法引數支援 * 萬用字元
// 獲取請求URL
    $url = $request->url();  // 不包含查詢字串
    $url_with_query = $request->fullUrl();  // 包含查詢字串
// 獲取請求方法
    $method = $request->method(); // GET/POST
    if($request->isMethod('post')){
        // true or false
    }
// 獲取請求輸入
    (獲取所有輸入值)
        $input = $request->all();
    
    (獲取單個輸入值)
        $name = $request->input('name');
        $name = $request->input('name', '學院君'); // 如果請求輸入值在當前請求 URL 中未出現時該值將會被返回
        $input = $request->input('products.0.name'); // 處理表單陣列輸入時,可以使用”.”來訪問陣列輸入
        $names = $request->input('products.*.name'); // 處理表單陣列輸入時,可以使用”.”來訪問陣列輸入
    
    (從查詢字串中獲取輸入)
        $name = $request->query('name');
        $name = $request->query('name', '學院君');
        $query = $request->query();
    
    (通過動態屬性獲取輸入)
        $name = $request->name;
    
    (獲取JSON輸入值)
        $name = $request->input('user.name');
    
    (獲取輸入的部分資料)
        $input = $request->only(['username', 'password']);
        $input = $request->only('username', 'password');
        $input = $request->except(['credit_card']);
        $input = $request->except('credit_card');
    
    (判斷請求引數是否存在)
        if ($request->has('name')) {
            // 判斷引數在請求中是否存在,可以使用 has 方法,如果引數存在則返回 true
        }
    
        if ($request->has(['name', 'email'])) {
            // 該方法支援以陣列形式查詢多個引數,這種情況下,只有當引數都存在時,才會返回 true
        }
    
        if ($request->filled('name')) {
            // 如果你想要判斷引數存在且引數值不為空,可以使用 filled 方法
        }
// 上一次請求輸入
    (將輸入儲存到Session)
        $request->flash();
        $request->flashOnly('username', 'email');
        $request->flashExcept('password');
    
    (將輸入儲存到 Session 然後重定向)
        如果你經常需要一次性儲存輸入請求輸入並返回到表單填寫頁,可以在 redirect() 之後呼叫 withInput() 方法實現這樣的功能
        return redirect('form')->withInput();
        return redirect('form')->withInput($request->except('password'));
    
    (取出上次請求資料)
        $username = $request->old('username');

// Cookie
    (從請求中取出Cookie)
        $value = $request->cookie('name');
    
    (新增Cookie到響應)
        return response('歡迎來到 Laravel 學院')->cookie(
            'name', '學院君', $minutes
        );
    
    (生成Cookie例項)
        如果你想要生成一個 Symfony\Component\HttpFoundation\Cookie 例項以便後續新增到響應例項,可以使用全域性輔助函式 cookie,該 Cookie 只有在新增到響應例項上才會傳送到客戶端:
        $cookie = cookie('name', '學院君', $minutes);
        return response('歡迎來到 Laravel 學院')->cookie($cookie);

// 檔案上傳
    (獲取上傳的檔案)
        $file = $request->file('photo');
        if ($request->hasFile('photo')) {
            // 可以使用 hasFile 方法判斷檔案在請求中是否存在
        }
    
    (驗證檔案是否上傳成功)
        if ($request->file('photo')->isValid()){
            // 使用 isValid 方法判斷檔案在上傳過程中是否出錯
        }
    
    (檔案路徑 & 副檔名)
        $path = $request->photo->path();
        $extension = $request->photo->extension();
    
    (其他檔案方法)
        https://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html
    
    (儲存上傳的檔案)
        store();
            * 接收一個檔案儲存的相對路徑(相對於檔案系統配置的根目錄 ),該路徑不需要包含檔名,因為系統會自動生成一個唯一ID作為檔名, 還接收一個可選的引數 —— 用於儲存檔案的磁碟名稱作為第二個引數(對應檔案系統配置 disks 的鍵名,預設值是 local),該方法會返回相對於根目錄的檔案路徑
                $path = $request->photo->store('images');
                $path = $request->photo->store('images', 's3');
    
            * 如果你不想自動生成檔名,可以使用 storeAs 方法,該方法接收儲存路徑、檔名和磁碟名作為引數:
                $path = $request->photo->storeAs('images', 'filename.jpg');
                $path = $request->photo->storeAs('images', 'filename.jpg', 's3');