Laravel学习笔记基础系列--(十)Laravel请求的处理

作者: 温新

分类: 【Laravel】

阅读: 2180

时间: 2021-07-07 15:58:59

作者:温新

时间:2021-06-26

请求有什么作用?通过前面视图的介绍,已经制作了一个简单的form表单,那么form所提交的表单数据怎么处理?这就需要Laravel请求实例Reuqest来处理了。

用一句话来概括,请求实例就是用来处理用户数据。

优雅的请求实例

说明:为了演示,请删除上篇文章演示的中间件功能,并恢复路由为Route::get('demo', 'DemoController@index');

来回顾一下store方法,可以看到,stroe方法一个参数$requst,这个参数是实例参数,其类为Illuminate\Http\Request

// DemoController.php

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class DemoController extends Controller
{
    public function store(Request $request)
    {
        dd($request->all());
    }
}

获取表单数据

获取用户提交表单数据的值,可以使用Illuminate/Http/Request实例,其封装了很多实用的方法。

获取表单所有数据

all方法以数组方式获取所有输入的值。现在可以尝试提交表单数据了,然后使用all方法接收所提交数据的值。

$data = $request->all();

获取一个值

input方法获取提交表单数据中的一个值。

// 方式一
$username = $request->input('username');
// 方式二 可以指定默认值
$username = $request->input('username','自如初');

query方法用于获取get参数

用法与input类似,只不过query方法用获取get请求参数。

第一步:定义路由 web.php

Route::get('test','DemoController@test');

第二步:定义方法 DemoController.php

public function test(Request $request)
{
    // 获取单个参数
    dump($request->query('name'));
    // 指定默认值
    dump($request->query('name','自如初'));
    // 获取所有get参数   
    dd($request->query());
}

第三步:访问

你的域名/test??name=lisi&age=17

获取post请求的所有值

如果是post请求,那么all方法可以换成post方法。

dump($request->post('username'));
dd($request->post());

query与input的区别

打印$request实例,会发现它有requestquery属性:

input方法会从query+request属性中获取请求参数的值;post方法是从request属性对象中获取post请求参数值。

简单地说,input获取所有请求参数;query获取get请求参数。

通过动态属性获取值

dd($request->username);

获取部分值

使用onlyexcept获取部分值。only获取指定要接收的字段值;except排除不需要接收的字段值。

改造index.blade.php界面

<form action="{{ route('store') }}" method="post">
   用户名:<input type="text" name="username">
   昵称:<input type="text" name="nickname">
	邮箱:<input type="text" name="email">
	<input type="submit" value="提交">
</form>

获取指定的值

// DemoController.php中的store方法
// 只接收这两个值
dump($request->only(['username','email']));
// 不接收username,其他的都接收
dump($request->except('username'));

获取JSON值

如需要发送JSON数据到后台,需要设置请求头Content-Typeapplication/json,然后可以通过input方法获取JSON数据。但是必须用.号解析数组。

$username = $request->input('user.username');

判断请求参数的其他实用方法

判断请求参数是否存在

has方法用于判断请求参数是否存在,存在返回 true

// stroe方法中演示
// 接收单个值
dump($request->has('username'));
/*
*接收多个,只有都存在时返回true
*age不存在,因此返回了false
*/
dump($request->has(['username','nickname','age']));

hasAny方法,只要有一个字段值存在就返回true

// age字段不存在,其他两个存在,因此返回true
dump($request->hasAny(['username','nickname','age']));

filled方法,请求参数必须存在且不能为空。

// 提交表单时,username不填写,返回FALSE,有值返回true
dump($request->filled('username'));

missing方法,判断请求参数字段不存在

// age字段值不存在,返回true
dump($request->missing('age'));

获取请求路径与方法

假如要获取当前请求的URL路径该怎么办?$request实例中提供了相关的方法。

下面我们基于DemoController中的index方法来演示。

获取请求路径

path方法获取当前请求的路径信息,如http://demo.com/usr/1,则path方法返回/usr/1

// DemoController.php
public function index(Request $request)
{	
    // 返回 demo
    dump($request->path());
    return view('demo.index');
}

获取请求的URL

获取完整的URL信息可以使用url方法或fullurl方法。url返回不带参数的url,fullurl返回包含参数的URL。

// 如请求:http://la8.com/demo?id=112

// url()方法返回http://la8.com/demo
dump($request->url());
// fullurl()方法返回 http://la8.com/demo?id=112
dump($request->fullurl());

获取请求方法

method方法返回HTTP请求方式。isMethod方法验证HTTP请求。

本例演示将在store方法中进行。

// 获取当前请求方法
$method = $request->method();
// 判断是否为POST请求
if ($request->isMethod('POST')) {

}

请求数据缓存

有这样一个真实开发环境,比如登录页面填写用户名与密码,假如密码输错了,那么整个页面的信息需要填写,这是很不友好的。Laravel提供了这样一个机制,两次请求之间,可以获取上一次请求的值。若使用的是Laravel自带的验证机制,那么需要设置,可以直接在在视图中使用old()助手函数调用。如下案例

<!--index.blade.php-->
<form action="{{ route('store') }}" method="post">
    用户名:<input type="text" name="username" value="{{old('username')}}">
    <input type="submit" value="提交">
</form>

将数据存入session

$request->flash();

获取上一次请求数据

$request->old('username');

Cookie操作

由于Cookie是存储在浏览器端的,因此cookie必须依赖于某个请求和响应,session是存储在服务器端,因此session不需要依赖某个请求或响应头。

关于cookie的操作,直接在路由中进行演示。

定义路由:

Route::get('addcookie', function(){
    return response('自如初博客')->cookie('webName','自如初',60);
});
Route::get('getcookie', function(\Illuminate\Http\Request $request){
    dump($request->cookie('webName'));
});

添加cookie到响应

用法:cooke(cookie键,cookie值,cookie有效时间);

Route::get('addcookie', function(){
    return response('自如初博客')->cookie('webName','自如初',60);
});

获取cookie

Route::get('getcookie', function(\Illuminate\Http\Request $request){
    dump($request->cookie('webName'));
});

我是温新

每天进步一点点,就一点点

请登录后再评论