关于lavarel:Laravel框架之请求Request篇

38次阅读

共计 3731 个字符,预计需要花费 10 分钟才能阅读完成。

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 的值 

正文完
 0