1.获取Request请求(表单数据)

Laravel中一般通过控制器方法依赖注入来获取当前请求的Request实例。
这里以一个隐式控制器测试
创建RequestController.php

php artisan make:controller RequestController

routes.php定义路由如下:

Route::controller('request','RequestController');

定义测试方法:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class RequestController extends Controller
{
    public function getTest(Request $request)
    {
        // 获取所有get、post提交的表单数据
        var_dump($request->all());

        // 获取某一个表单项数据,如果没有该字段则去后边的默认值,如defaultName
        var_dump($request->input('name','defaultName'));

        // 判断输入参数名是否存在,has方法
        if($request->has('name'))
            echo $request->input('name');

        // 获取部分输入值,可使用only方法
        $onlyData = $request->only('name','age');

        // 想要排除部分输入参数值,可使用except方法
        $exceptData = $request->except('age');
    }
}

这里写图片描述

2.获取请求URL及请求方法

    public function getUrl(Request $request)
    {
        // 匹配request/*的URL才能继续访问
        if(!$request->is('request/*')){
            abort(404);
        }
        // 获取访问方法路径,path方法
        $uri = $request->path();
        // 获取访问URL,url方法
        $url = $request->url();
        echo $uri;
        echo '<br>';
        echo $url;
        echo '<br>';

        // 非get请求不能访问
        if(!$request->isMethod('get')){
            abort(404);
        }
        // 获取访问方法 method方法
        $method = $request->method();
        echo $method;
    }

3.获取上次请求的数据

flash 方法将请求数据暂时保存到session中
old 方法获取session中保存的数据,获取到数据后就会将session中保存的请求数据销毁

    public function getOld(Request $request)
    {
        // flash方法,将这次请求的数据暂时保存到session中
        $request->flash();
        return redirect('/request/current')->withInput();
    }

    public function getCurrent(Request $request)
    {
        // old方法,获取session中上次保存的数据,然后销毁session中的数据
        $old = $request->old();
        var_dump($old);
    }

浏览器访问http://xxx/request/old?name=name
会跳转到http://xxx/request/current
同时将上次请求的name打印出来,再次刷新本页name消失。

4.获取Cookie数据

用法:

// 获取cookie
$request->cookie();
// 设置cookie
$response->withCookie();

实例:
定义一个获取cookie的方法

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

浏览器访问xxx/cookie即可看到所有cookie
定义一个设置cookie的方法

public function getAddCookie(){
    $response = new Response();
    // 第一个参数是cookie名,第二个参数是cookie值,第三个参数是有效期(分钟)
    $response->withCookie(cookie('website','LaravelAcademy.org',1));
    // 如果想要cookie长期有效使用如下方法
    // $response->withCookie(cookie()->forever('name', 'value'));
    return $response;
}

【说明】:这里用到Response,需要顶部use

use Illuminate\Http\Response;

访问xxx/add-cookie添加cookie,然后再访问xxx/cookie你会发现多了刚才设置的那一条cookie。

5.文件上传

显示文件上传表单的方法:

    public function getFileupload()
    {
        $postUrl = '/request/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){
        // 判断请求中是否包含name=file的上传文件
        if(!$request->hasFile('file')){
            exit('上传文件为空!');
        }
        // 获取文件信息,包括文件名,缓存路径,mimeType,缓存文件名等
        $file = $request->file('file');
        // dd($file);

        // 判断文件上传过程中是否出错
        if(!$file->isValid()){
            exit('文件上传出错!');
        }

        // 拼接最终文件保存路径,laravel5.1是这个写法,我5.2获取不到,改成下边写法即可。
        // $destPath = realpath(public_path('images'));

        // 拼接最终文件保存路径(适用于laravel5.2)
        $destPath = public_path('images');

        if(!file_exists($destPath))
            mkdir($destPath,0755,true);

        // 获取当前文件原始名
        $filename = $file->getClientOriginalName();

        // move() 移动上传好的文件到指定目录。该函数接收两个参数,第一个是保存路径,第二个是文件名
        if(!$file->move($destPath,$filename)){
            exit('保存文件失败!');
        }
        exit('文件上传成功!');
    }

该文件上传实例是 SymfonyComponentHttpFoundationFileUploadedFile类的实例

标签: Laravel

添加新评论


手机号仅后台超管可见,普通注册用户以及网站前台全站不可见,请勿担心泄露风险!