Laravel框架学习(Request请求数据、Cookie、文件上传) 阿星小栈

本文主要是介绍Laravel框架学习(Request请求数据、Cookie、文件上传) 阿星小栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、获取Request请求数据
Laravel中一般通过控制器方法依赖注入来获取当前请求的Request实例。
我们通过定义一个隐式控制器来进行本章节的测试。首先我们在routes.php定义路由如下:

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

然后我们在app/Http/Controllers下创建一个控制器RequestController.php:

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Http\Response;use App\Http\Requests;
use App\Http\Controllers\Controller;class RequestController extends Controller
{public function getBasetest(Request $request){$input = $request->input('test');echo $input;}
}

 

要访问getBasetest方法,我们只需在浏览器中访问http://selfstudy.com/request/basetest?test=yyk,这样页面会输出:
yyk, 注意url里的basetest方法对应的是控制器中的getBasetest方法

2、获取请求URL及请求方法
2.1 获取请求URL路径

要获取当前请求的URL,我们可以通过Request实例上的path方法,需要注意的是该方法返回相对请求路径,如果要获取绝对请求路径,可以通过Request实例上的另一个方法——url:

public function getUrl(Request $request)
{//匹配request/*的URL才能继续访问if(!$request->is('request/*')){abort(404);}$uri = $request->path();$url = $request->url();echo $uri.'--'.$url;
}

我们在浏览器中访问http://selfstudy.com/request/url,页面输入如下内容:

request/url–http://selfstudy.com/request/url

2.2 获取请求方法

我们还可以通过调用Request实例上的getMethod方法获取当前请求的方法:

public function getMethod(Request $request){//非get请求不能访问if(!$request->isMethod('get')){abort(404);}$method = $request->method();echo $method;
}

 

3、获取请求数据
3.1 当前请求输入

使用Request实例上的input方法即可获取请求输入数据。该方法可以接收两个参数,第一个参数是传递参数名称,第二个参数是如果参数名为空返回的默认值,此外该方法还支持获取数组参数对应值,我们定义测试方法如下:

public function getInputData(Request $request){//获取GET方式传递的name参数,默认为LaravelAcademy$name = $request->input('name','LaravelAcademy');echo $name;echo '<br>';echo $request->input('test.0.name');
}

注意这里方法参数的写法 input-data对应的控制器中的方法为getInputData

在浏览器中输入http://selfstudy.com/request/input-data?name=abc&test[][name]=abcd,则页面输出:
abc
abcd
如果我们想要在获取输入值之前判断输入参数名是否存在,可以使用has方法,比如我们想要判断输入参数是否包含hello,可使用如下方法:

if($request->has('hello'))echo $request->input('hello');

想要获取所有输入参数值,可以使用Request实例上的all方法;想要获取部分输入值,可使用only方法;想要排除部分输入参数值,可使用except方法:
http://selfstudy.com/request/input-data?name=abc&test[][name]=abcd&hello=world

public function getInputData(Request $request){$allData = $request->all();$onlyData = $request->only('name','hello');$exceptData = $request->except('hello');echo '<pre>';print_r($allData);print_r($onlyData);print_r($exceptData);
}

 

3.2 上一次请求输入

上面的方法都是用于获取当前请求的输入,如果想要获取上一次请求的输入,需要在处理上一次请求时使用Request实例上的flash方法将请求数据暂时保存到session中,然后在当前请求中使用Request实例上的old方法获取session中保存的数据,获取到数据后就会将session中保存的请求数据销毁:

public function getLastRequest(Request $request){$request->flash();
}public function getCurrentRequest(Request $request){$lastRequestData = $request->old();echo '<pre>';print_r($lastRequestData);
}

 

如果我们想要在上次请求保存数据后重定向到当前请求URL,则可以使用如下方式定义getLastRequest方法:

public function getLastRequest(Request $request){//$request->flash();return redirect('/request/current-request')->withInput();
}

在浏览器中输入http://selfstudy.com/request/last-request?name=abc&test[][name]=abcd&hello=world页面会重定向到http://selfstudy.com/request/current-request并输入出

Array ( [name] => abc [test] => Array ( [0] => Array ( [name] => abcd
) ) [hello] => world )

再次刷新页面,输出为空:

Array ( )

4、获取Cookie
我们可以使用Request实例上的cookie方法获取cookie数据,该方法可以接收一个参数名返回对应的cookie值,如果不传入参数,默认返回所有cookie值:

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

 

我们在浏览器中访问http://selfstudy.com/request/cookie,页面输出:

array:2 ["XSRF-TOKEN" => "eXdbBOXXkNwiJMlvmCG29lTMpKl92xnTtORHtgNf""laravel_session" => "618cd5ab8c0560b14cda49bc19a8d6d63dc26cc3"
]

 

我们可以调用Response实例上的withCookie方法新增cookie:

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

 

我们重新定义getCookie方法如下:

public function getCookie(Request $request){$cookie = $request->cookie('test');echo $cookie;
}

 

接下来我们在浏览器中访问http://selfstudy.com/request/add-cookie,再访问http://selfstudy.com/request/cookie,页面输出如下:

yykk

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('上传文件为空!');}$file = $request->file('file');//判断文件上传过程中是否出错if(!$file->isValid()){exit('文件上传出错!');}$destPath = realpath(public_path('images'));if(!file_exists($destPath))mkdir($destPath,0755,true);$filename = $file->getClientOriginalName();if(!$file->move($destPath,$filename)){exit('保存文件失败!');}exit('文件上传成功!');
}

 

通过以上代码可以看到我们可以使用Request实例上的file方法获取上传文件实例,该方法接收的参数是上传文件input标签的name属性,该文件上传实例是 Symfony\Component\HttpFoundation\File\UploadedFile类的实例,更多有关该实例的可用方法,可参考UploadedFile的API文档。

这篇关于Laravel框架学习(Request请求数据、Cookie、文件上传) 阿星小栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974460

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;