Laravel5.1 請求--Request


我們先來創建一個路由才測試請求實例

Route::controller('articles','ArticlesController');

創建相應方法:

    public function getTest(Request $request)
    {
        $input = $request->input('test');
        echo $input;
    }

訪問http://localhost:8000/articles/test?test=10 來測試。

 

獲取URL路徑和請求方法

Request還可以獲取url和uri路徑:

    public function getTest(Request $request)
    {
        // 如果不是articles/路徑就拋出404
        if (!$request->is('articles/*')){
            abort(404);
        }
        $uri = $request->path();
        $url = $request->url();
        echo $uri;
        echo '<br />';
        echo $url;
    }

獲取請求方法:

    public function getTest(Request $request)
    {
        // 如果不是get方法就拋出404
        if (!$request->isMethod('get')){
            abort(404);
        }
        $method = $request->method();
        echo $method;
    }

 

獲取請求數據

我們使用Request的input方法來獲取當前請求的輸入數據,注意看注釋哦:

    public function getTest(Request $request)
    {
        // input方法可接受兩個參數 第一個參數是輸入數據的鍵,第二個參數是默認值,當沒有取得數據時使用默認值。
        $name = $request->input('name','defaultName');

        // input方法還支持數組取值
        // 對應的輸入數據:http://......?test[][name]=balabala
        $test = $request->input('test.0.name');

        echo $name;
        echo '<br />';
        echo $test;
    }

使用這個url來測試:http://localhost:8000/articles/test?name=ask&test[][name]=test

 

我們可以使用has方法判斷參數是否存在

    public function getTest(Request $request)
    {
        // 判斷參數是否存在
        if ($request->has('name')){
            echo $request->input('name');
        }
    }

 

實際上我們可以使用一系列方法來獲取我們想要的輸出數據比如:only,except,all

    public function getTest(Request $request)
    {
        // 獲取全部數據
        $allData = $request->all();

        // 只獲取name和age
        $onlyData = $request->only('name','age');

        // 獲取除了name的所有數據
        $exceptData = $request->except('name');

        echo '<pre>';
        print_r($allData);
        print_r($onlyData);
        print_r($exceptData);
    }

我們使用這個url來測試:http://localhost:8000/articles/test?name=ask&age=24&test=test

 

獲取上次的請求輸入

如果想要獲取上一次請求的輸入,需要在處理上一次請求時使用Request實例上的flash方法將請求數據暫時保存到session中,然后在當前請求中使用Request實例上的old方法獲取session中保存的數據,獲取到數據后就會將session中保存的請求數據銷毀:

    public function getLastRequest(Request $request)
    {
        $request->flash();
    }

    public function getCurrentRequest(Request $request)
    {
        $lastData = $request->old();
        echo '<pre>';
        print_r($lastData);
    }

我們先訪問http://localhost:8000/articles/last-request?name=last&some=some 然后訪問 http://localhost:8000/articles/current-request

如果你嫌這樣麻煩 也可以重定向 使用withinput方法 效果是一樣的:

    public function getLastRequest(Request $request)
    {
        return redirect('/articles/current-request')->withInput();
    }

    public function getCurrentRequest(Request $request)
    {
        $lastData = $request->old();
        echo '<pre>';
        print_r($lastData);
    }

 

獲取cookie數據

我們可以使用Request實例上的cookie方法獲取cookie數據,該方法可以接收一個參數名返回對應的cookie值,如果不傳入參數,默認返回所有cookie值:

    public function getCookie(Request $request)
    {
        $cookies = $request->cookie();
        dd($cookies);
    }

我們可以調用Response實例上的withCookie方法新增cookie:

    public function getAddCookie()
    {
        $response = new Response();
        //第一個參數是cookie名,第二個參數是cookie值,第三個參數是有效期(分鍾)
        $response->withCookie(cookie('cookie','learn-laravel',3));
        //如果想要cookie長期有效使用如下方法
//        $response->withCookie(cookie()->forever('cookie-name','cookie-value'));
        return $response;
    }

 

上傳文件

我們先來創建表單:

//文件上傳表單
    public function getFileupload()
    {
        $postUrl = '/articles/fileupload';
        $csrf_field = csrf_field();
        $html = <<<CREATE
<form action="$postUrl" method="POST" enctype="multipart/form-data">
$csrf_field
<input type="file" name="file"><br/><br/>
<input type="submit" value="提交"/>
</form>
CREATE;
        return $html;
    }

上傳文件操作:

    public function postFileupload(Request $request)
    {
        // hasfile  判斷文件是否存在 參數值對應着表單中的name值
        if (!$request->hasFile('file')){
            exit('上傳文件為空');
        }
        // 取到文件
        $file = $request->file('file');
        //判斷文件上傳過程中是否出錯
        if (!$file->isValid()){
            exit('文件上傳出錯');
        }
        // 判斷路由是否存在
        $destPath = public_path('images');
        if (!file_exists($destPath)){
            // 不存在就創建
            mkdir($destPath,0755,true);
        }
        $filename = $file->getClientOriginalName();
        if (!$file->move($destPath,$filename)){
            exit('文件保存失敗');
        }
        exit('文件上傳成功');
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM