【Laravel5.3 笔记整理四】Laravel的请求(请求数据及类型、删除、图片上传、闪存、Cookie的使用)

​  准备工作:将之前 web.php中的所有路由都注释掉(为了避免有冲突,本例子是为了测试使用)。

  • 在 web.php 中定义路由:
Route::get('request', "RequestController@index");
  • D:\phpStudy\PHPTutorial\WWW\laravel\app\Http\Controllers 下 创建控制器 RequestController.php(可通过 artisan创建)
php artisan make:controller RequestController
  • 在 控制器 RequestController.php 中写方法 index
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

// laravel的请求
class RequestController extends Controller
{
    public function index(Request $request)
    {
        dd($request);
    }
}

注:以下在 RequestController.php 中的 index方法 中执行,且地址栏访问 www.la.com/request?name=zhangsan

1. 获取地址

1) 输出当前URL地址
echo $request->fullUrl(); // 输出结果: http://www.la.com/request?name=zhangsan
2) 获取URL的路由
echo $request->path(); // 输出结果: request
3) 获取 URL地址(除参数外)
echo $request->url(); // 输出结果:
http://www.la.com/request
4) 判断当前路由是否是 request
var_dump($request->is('request')); // 返回值:true|false


2. 获取请求类型

1) 判断当前的请求类型
echo $request->method();
2) 判断当前的请求是否是 特定的请求(如:是否为get请求)

返回值:true|false

var_dump($request->isMethod('POST'));
3) 使用
public function add(Request $request)
{
    // 判断当前是否为 get请求
    if ($request->isMethod('GET')) {
        // 加载添加页面
        return view('add');
    } else {
        // 数据库的入库操作
        echo "插入数据库";
    }
}
4) 请求数据(后期结合数据库使用)

① 获取所有的请求数据

$data = $request->all();

② 获取特定字段

echo $request->input('name');

③ 设置默认值(如果有值,显示对应的值;没有则使用默认值)

echo $request->input('age', '18');

④ 判断数据是否存在

返回值: true | false

var_dump($request->has('username'));

⑤ 获取部分输入数据

// 两种方式都可以获取到
$data1 = $request->only('name''pass');
$data1 = $request->only(['name', 'pass']);
var_dump($data1); 

⑥ 获取除指定数据以外的数据

$data2 = $request->except('_token', 'name');
$data2 = $request->except(['_token', 'name']);
var_dump($data2);
以下为上述完整的代码:
  • UserController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class UserController extends Controller
{
    // 用户添加
    public function add(Request $request)
    {
        // 判断当前是否为 get请求
        if ($request->isMethod('GET')) {
            // 加载添加页面
            return view('add');
        } else {
            // 存入数据库
            echo "存入数据库";

            // 1. 获取所有的请求数据
            $data = $request->all();
            dd($data);

            // 2. 获取特定字段
            echo $request->input('name');

            // 3. 设置默认值
            echo $request->input('sex', '男');

            // 4. 判断提交的数据是否存在(返回值: true | false)
            var_dump($request->has('sex'));

            // 5. 获取部分输入数据
            $data1 = $request->only('name', 'pass');
            $data1 = $request->only(['name', 'pass']);
            var_dump($data1);

            // 6. 获取除指定数据外的数据
            $data2 = $request->except('_token', 'name');
            $data2 = $request->excepte(['_token', 'name']);
            var_dump($data2);
        }
    }
}


3. 判断请求类型的使用

​ 若该请求为 get 请求,则 加载用户添加页面 ,否则 将数据存入数据库

  • route / web.php
Route::match(['get', 'post'], 'admin/user/add', "UserController@add");
  • app / controllers / UserController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Request;

class UserController extends Controller
{
    // 用户添加
    public function add(Request $request)
    {
        // 判断当前是否为 get请求
        if ($request->isMethod('GET')) {
            // 加载添加页面
            return view('add');
        } else {
            // 存入数据库
            echo "存入数据库";
        }
    }
}
  • resource / views / add.blade.php
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户新增</title>
</head>
<body>
    <form action="/admin/user/add" method="post">
        {{csrf_field()}}
        <p>
            User:
            <input type="text" name="name">
        </p>
        <p>
            Pass:
            <input type="password" name="pass">
        </p>

        <p>
            <input type="submit" value="提交">
        </p>
    </form>
</body>
</html>


4. 闪存

作用:会将合法的字段值存入闪存,不合法的清空(若:在注册信息的时候,用户名,邮箱都正确,但是电话号码出错,此时会将表单提交过来的全部数据存入闪存,为了提高用户的体验度)

1) 将表单提交过来的所有数据 写入闪存
$request->flash();
2) 把谁写入闪存
$request->flashOnly('name', 'tel', 'email');
3) 除了谁,其他的都写入闪存
// 除了 tel,其他都写入闪存(密码无法写入闪存)
$request->flashExcept('tel');
4)把当前所有的数据都写入闪存
return back()->with('errors', "用户名长度不满足")->withInput();

实例:注册为例

  • web.php
// 注册页面
Route::get('reg', "LoginController@index");
// 注册操作
Route::post('insert', "LoginController@insert");
  • resources / views / reg.blade.php
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <?php
        // $errors 为报错信息
        if (!is_object($errors)) {
            echo "<h1>$errors</h1>";
        }
    ?>
    <form action="/insert" method="post">
        <p>
            {{csrf_field()}}
            User:
            <input type="text" name="name" value="{{old('name')}}">
        </p>
        <p>
            Pass:
            <input type="password" name="pass">
        </p>
         <p>
            Repass:
            <input type="password" name="repass">
        </p>
         <p>
            Tel:
            <input type="text" name="tel" value="{{old('tel')}}">
        </p>
         <p>
            Email:
            <input type="text" name="email" value="{{old('email')}}">
        </p>

        <p>
            <input type="submit" value="提交">
        </p>
    </form>
</body>
</html>
  • app/Http/LoginController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class LoginController extends Controller
{
    // 注册页面
    public functin index()
    {
        return view('reg');
    }

    // 注册功能
    public function insert(Request $request)
    {
        $name = $request->input('name');

        // 写入闪存
        // 除了 tel 其他都存入 闪存
        $request->flashExcept('tel');

        // 判断用户名长度
        if (strlen($name) >=6 && strlen($name) <= 12) {

        } else {
            // 回退到上一个页面
            return back()->with('errors', "用户名长度不满足")->withInput();
        }
    }
}
  • 访问 www.la.com/reg
  • 运行结果:

注册界面-laravel闪存的应用


5. 图片上传

0) 获取图片的上传路径
  • 方法一:
var_dump($_FILES);

运行结果:

array(1) {
  ["img"]=>
  array(5) {
    ["name"]=>
    string(30) "注册界面-Laravel闪存.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(22) "C:\Windows\php542F.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(24714)
  }
}

* 方法二:

dd($requeset->all());

运行结果:

array:2 [▼
  "_token" => "iDFA4HHtnuTL2AvXcf69fUgHXXF1KhGUwYH6MRgU"
  "img" => UploadedFile {#365 ▼
    -test: false
    -originalName: "注册界面-Laravel闪存.png"
    -mimeType: "image/png"
    -size: 24714
    -error: 0
    path: "C:\Windows"
    filename: "phpC183.tmp"
    basename: "phpC183.tmp"
    pathname: "C:\Windows\phpC183.tmp"
    extension: "tmp"
    realPath: "C:\Windows\phpC183.tmp"
    aTime: 2018-08-07 16:38:11
    mTime: 2018-08-07 16:38:11
    cTime: 2018-08-07 16:38:11
    inode: 0
    size: 24714
    perms: 0100666
    owner: 0
    group: 0
    type: "file"
    writable: true
    readable: true
    executable: false
    file: true
    dir: false
    link: false
    linkTarget: "C:\Windows\phpC183.tmp"
  }
]
1) 获取上传的文件
// 方法一:
$img = $request->file('img'); // img为表单中 的name
// 方法二:
$img2 = $request->img;
dd($img);

打印结果如下:

laravel-图片上传(获取上传的图片)

2) 判断文件是否上传

返回值:true | false

var_dump($request->hasFile('img'));

实例:

  • web.php
// 文件上传
Route::get('photo', "UserController@photo");
// 处理文件上传
Route::post('upload', "UserController@upload");
  • resources / views / photo.blade.php
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <p>
            {{csrf_field()}}
            Photo:
            <input type="file" name="img">
        </p>

        <p>
            <input type="submit" value="提交">
        </p>
    </form>
</body>
</html>
  • app / Http / Controllers / UserController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use app\Http\Requests;

class UserController extends Controller
{
    // 图片上传页面
    public function photo()
    {
        return view('photo');
    }

    // 文件上传处理
    public function upload(Request $request)
    {
        // 如何实现文件上传
        // 1.1 判断是否上传文件
        // 1.2 把文件移动到指定目录

        // 获取上传的文件
        // 方法一:
        $img = $request->file('img');
        // 方法二:
        $img2 = $request->img;

        // 1. 判断文件是否上传(返回值: true | false)
        if ($request->hasFile('img')) {
            // 获取文件的后缀名
            $ext = $request->file('img')->getClientOriginalExtension();
            // 创建新的文件名(时间戳 + 随机数 + 后缀名)
            $newFile = time().rand().".".$ext;

            // 2. 上传文件操作(把上传的文件移到指定目录)
            $request->file('img')->move('./Uploads');
        } else {
            // 回到上一个页面
            return back();
        }

    }
}
  • 在 public 下 创建一个 Uploads 文件夹,用来存储上传的图片
  • 访问 www.la.com/photo

bug:该代码实现并未限制 上传文件的类型 ,因此图片,文件等都可以上传

(一般很少用该种上传方式,一般都用 无刷新上传文件,因为界面友好,用户体验度高)


6、Cookie

1)Cookie 的使用场景
  • 登录
    • 如果未勾选自动登录,默认采用 session(session关闭浏览器会失效)
    • 如果勾选了自动登录,默认采用 cookie
  • 网站浏览记录
$_COOKIE['name'] != $request->cookie('name');

① 查看所有 cookie

dd($request->cookie());

// 运行结果:
array:2 [▼
  "XSRF-TOKEN" => "iDFA4HHtnuTL2AvXcf69fUgHXXF1KhGUwYH6MRgU"
  "laravel_session" => "8a79635d0d58fae23d7ca2abd939661943bdc192"
]

② 查看 指定 cookie

// 方法一:
dd($request->cookie('laravel_session'));
echo $request->cookie('laravel_session');

// 方法二:
echo \Cookie::get('laravel_session');
4) 设置cookie
// 方法一:
\cookie::queue('boy', 'zhangsan', 10);

// 方法二:
$cookie = cookie('name', 'xiaoming', 10);
return response('Hello Laravel')->cookie($cookie);

完整代码实例:

  • web.php
// 查看 cookie
Route::get('cookie', "UserController@cookie");
  • app / Http / Controllers / UserController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class UserController extends Controller
{
    // 新建 cookie 方法
    public function cookie(Request $request)
    {
        // 查看所有的cookie
        dd($request->cookie());

        // 查看指定的 cookie
        // 方法一:
        dd($request->cookie('laravel_session'));
        echo $request->cookie('laravel_session');
        // 方法二:
        echo \Cookie::get('laravel_session');

        // 设置cookie
        // 方法一:
        \Cookie::queue('boy', 'zhangsan', 10);
        // 方法二:
        $cookie = cookie('name', 'xiaoming', 10);
        return response('Hello Laravel')->cookie($cookie);
    }
}

运行结果:

laraval-设置cookie

猜你喜欢

转载自blog.csdn.net/studyphp123/article/details/81869893