How部分

1. 接收请求

1.1 Request 基本使用

要通过 依赖注入 获取当前 HTTP 请求实例,你应该在控制器上引入 Illuminate\Http\Request 类。传入的请求实例将会由 服务容器 自动注入。
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request)
    {
        $name = $request->input('name');
        //
    }
}

1.2 Request 的常用方法

路由部分

// GET 方式请求,输出结果对应 Part one
Route::get('test/request', 'App\Http\Controllers\TestController@testGet');

// POST 方式请求,输出结果对应 Part Two
Route::post('test/request', 'App\Http\Controllers\TestController@testPost');

控制器部分

<?php
use Illuminate\Http\Request;

class TestController extends Controller
{
    // Part One: 针对 url(GET | http://127.0.0.1:8000/test/request?name=bert)
    public function testGet(Request $request)
    {
        // 获取请求路径(路由中的 uri 部分)
        $request->path(); //打印输出:"test/request"
        // 获取请求的 url(不带 get 请求参数)
        $request->url(); //打印输出:"http://127.0.0.1:8000/test/request"
        // 获取完整的 url(带 get 请求参数)
        $request->fullUrl(); //打印输出:"http://127.0.0.1:8000/test/request?name=bert"
        // 获取 request 请求方式
        $request->method(); //打印输出:"GET"
        // 或请求端口
        $request->getPort(); //打印输出:8000
    }
    
    // Part Two: 针对 url(Post | http://127.0.0.1:8000/test/request?company=Tencent&name=bert&finger=king)
    /**
     * form-data参数:
     * name=kinra
     * option[]=A
     * option[]=B
     * option[]=C
     * key=null
     */
    public function testPost(Request $request) {
        // 获取请求路径
        dump($request->path()); //打印输出:"test/request"
        // 获取请求的 url(不带参数)
        dump($request->url()); //打印输出:"http://127.0.0.1:8000/test/request"
        // 获取完整的 url(带参数)
        dump($request->fullUrl()); //打印输出:"http://127.0.0.1:8000/test/request?company=anflk&finger=king&name=bert"
        // 获取请求方法
        dump($request->method()); //打印输出:"POST"
        // 获取请求接口
        dump($request->getPort()); //打印输出:8000
        // 获取请求要求返回的格式
        dump($request->format()); //打印输出:"html"

        // 获取请求参数。
        dump($request->query()); //打印输出:["company" => "Tencent", "name" => "bert", "finger" => "king"]
        dump($request->input()); //打印输出:["name" => "kinra", "option" => [0 => "A", 1 => "B", 2 => "C"], "key" => null, "company" => "Tencent", "finger" => "king"]
        dump($request->all()); //打印输出:["name" => "kinra", "option" => [0 => "A", 1 => "B", 2 => "C"], "key" => null, "company" => "Tencent", "finger" => "king"]
        // 获取某一请求参数的值
        dump($request->input('company')); //打印输出:"Tencent"
        dump($request->company); //打印输出:"Tencent"
        dump($request->input('name')); //打印输出:"kinra"
        dump($request->query('name')); //打印输出:"bert"
        // 获取请求参数是数组,其中的某个值
        dump($request->input('option.0')); //打印输出:"A"
        
        // 判断输入值是否存在
        // Ⅰ. has 来判断当前请求中是否含有指定的值
        dump($request->has('name')); //打印输出:true
        dump($request->has('namd')); //打印输出:false
        // Ⅱ. 当给定一个数组时,has 将会判断指定的值是否全部存在
        dump($request->has(['name', 'company'])); //打印输出:true
        dump($request->has(['name', 'email'])); //打印输出:false
        // Ⅲ. hasAny 方法将会在指定的值有一个存在的情况下返回 true
        dump($request->hasAny(['name', 'email'])); //打印输出:true
        dump($request->hasAny(['pwd', 'email'])); //打印输出:false
        // Ⅳ. 如果你想要判断一个值在请求中是否存在,并且不为空,可以使用 filled 方法
        dump($request->filled('name')); //打印输出:true
        dump($request->filled('key')); //打印输出:false
    }
}

注意:

  1. 当处理包含数组的表单时,可以使用 . 运算符来访问数组的数据
  2. input 方法可以从整个请求体中获取数据(包括查询字符串), 而 query 方法仅仅从查询字符串中获取输入值。从上面的这两个方法可看出区别

    dump($request->input('name')); //打印输出:"kinra"
    dump($request->query('name')); //打印输出:"bert"
  3. 与 POST 请求参数同名的 GET 请求参数,其值会被 POST 请求的同名参数覆盖

1.3 获取旧数据

Laravel 允许你在两次请求之间保持数据。这个特性在有效性校验出错后重新填充表单时非常有用。
  1. 使用旧数据的前提:上一次(pre)请求的输入被闪存到 session 中,那么紧接着上次请求的本次(this) request 请求,可通过 old() 函数获取上次(pre)请求的输入,下次(next)请求无法获取上一次(pre)请求的输入,但如果本次(this)请入有输入且被闪存,则下次(next)请求可以获取本次(this)请求的输入。

    // 将本次请求输入闪存到 session 中,供下次请求使用这些输入。
    $request->flash(); //全部输入数据闪存到 session
    $request->flashOnly(['name', 'email']); //只将 name、email 闪存到session中
    $request->flashExcept(['name', 'email']); //将除 name、email 以外的其他输入数据闪存到session中
  2. 重定向时可使用 withInput() 进行链式调用,此时无需再调用 $request->flash();

        // 控制器中的一个函数。
        public function testSession(Request $request) {
            // $request->flash();
            return redirect('test/request')->withInput();
        }
    
        // 上面函数等同于下面这个函数
        public function testSession(Request $request) {
            $request->flash();
            return redirect('test/request');
        }
  1. 获取上次闪存到 session 的输入数据

    $request->old(); //获取上次闪存到 session 的全部输入数据,返回类型:数组
    $request->old('username'); //获取上次请求输入的 username 的值

kinra
19 声望0 粉丝