Laravel入坑指南(5)——请求与响应
作为互联网典型的Web应用,接收用户请求的数据,并将处理的结果向用户进行响应,是最基础也是最必备的功能。在原生的PHP中,我们常用$_POST、$_GET、$_REQUEST和$_FILES对不同的请求接收,也用echo、var_export()、printf()等语句向用户进行响应。
在Laravel中,框架内部规定了自己的一套机制请求与响应机制。在这一节中,就让我们一起学习这个话题。
1、请求
(1) 路由参数
Laravel的参数,可以通过路由指定,并在路由的回调函数或指定的Controller中进行处理。举两个栗子:
示例1:
\Illuminate\Support\Facades\Route::any('/welcome/{id}',function ($id){
return $id;
});
在这个例子中,用户访问http://域名/welcome/6,回调函数中的$id参数就可以接收到6这个值。这里的id参数在url是必填项。
示例2:
//路由部分
\Illuminate\Support\Facades\Route::any('/welcome/{id?}',"MyController@hello"); //MyController部分
namespace App\Http\Controllers; use Illuminate\Http\Request; class MyController extends Controller
{
public function hello(Request $req,$id='')
{
return $id;
}
}
在这个例子中,用户访问http://域名/welcome/6,类MyController的hello函数中的$id参数就可以接收到6这个值。这里的id参数在url是可选项。(注意与示例1进行对比,路由与函数参数的写法均有区别)
(2) URL中GET参数的获取
无论是路由的回调函数,还是controller的行为函数,第一个参数可以用于Request类实例的注入(说白了,函数第一个参数是Request类型的变量)。
如果还有哪位小伙子不清楚什么是GET请求或GET参数,请点击文章最下方的链接联系我:)
在处理函数中,我们这样取到GET参数:
public function action(Request $req)
{
$req->query(key); //传入key值就能获取对应的value
}
(3) POST参数的获取
public function hello(Request $req)
{
$req->post(key);
}
(4) POST与GET参数混合获取(all函数可以同时获取GET和POST的参数,返回数组类型)
public function hello(Request $req)
{
$arr=$req->all(key);
$arr[key]; //这就是我们要获取的value
}
(5) COOKIE参数获取
public function hello(Request $req)
{
$req->cookie(key); //这是key对应的cookie值
}
(6) 其它
//请求路径
//假设访问的路径是http://192.168.1.5/hello/3?a=b
$req->url(); //获取的是http://192.168.1.5/hello/3
$req->fullUrl(); //获取的是http://192.168.1.5/hello/3?a=b
$req->path(); //获取的是hello/3
2、响应
(1)响应普通字符串
在行为函数是直接return字符串即可,请看下面这个栗子:
public function action(Request $req)
{
return "welcome";
}
(2)响应JSON
方法一:在行为处理函数中直接返回数组
public function action(Request $req)
{
return [key=>value]; //Laravel会先把这个数组转为json格式字符串,再传到客户端
}
方法二:调用response()->json()
public function action(Request $req)
{
return response()->json([
key=>value
]);
}
(3)响应模板
举个简单的栗子:
public function action(Request $req)
{
return view("welcome");
}
详细的请查看本系统第三篇《Laravel入坑指南(3)——模板》
(4)响应COOKIE
/*
$name : cookie的key
$value : cookie的值
$minutes : cookie存活时间
$path : cookie所属路径,一般填"/"
$domain : 所属域名,可用于二级域名跨域
$secure : 设为true则只有在https下才可以使用
$httpOnly : 设为true则js无法获取cookie值
*/
return response(响应内容)->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly);
(5)响应头:下面这个例子为跨域头
public function hello(Request $req,$id='')
{
return response("welcome",200)->withHeaders([
'Access-Control-Allow-Origin'=>"*",
'Access-Control-Allow-Headers'=>'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN',
'Access-Control-Expose-Headers'=>'Authorization, authenticated',
'Access-Control-Allow-Methods'=>'GET, POST, PATCH, PUT, OPTIONS',
'Access-Control-Allow-Credentials'=>'true'
]);
}
3、文件上传
(1)单文件上传:假设表单文件的key是f
public function hello(Request $req)
{
if($req->hasFile('f') && $req->file('f')->isValid())
{
$file['ext']=$req->f->extension(); //文件扩展名
$file['path']=$req->f->path(); //文件的路径
$file['mine']=$req->f->getMimeType(); //文件mime
$file['originName']=$req->f->getClientOriginalName(); //原始文件名
$file['size']=$req->f->getClientSize(); //文件尺寸 /*
$file的值
array (
'ext' => 'jpeg',
'path' => '/tmp/phpxq5lSe',
'mine' => 'image/jpeg',
'originName' => '1.jpg',
'size' => 196118,
)
*/
$file['uploadName']=sha1($file['originName']).'.'.$file['ext']; //要保存的文件名
$req->f->move(base_path().'/', $file['uploadName']); //参数1是所在目录
}
else
{
$req->f->getErrorMessage(); //错误信息
}
}
(2)多文件上传:假设表单文件的key是f[]
public function hello(Request $req,$id='')
{
if($req->hasFile('f'))
{
foreach ($req->f as $f)
{
if(!$f->isValid()) continue; $file['ext']=$f->extension(); //文件扩展名
$file['path']=$f->path(); //文件的路径
$file['mine']=$f->getMimeType(); //文件mime
$file['originName']=$f->getClientOriginalName(); //原始文件名
$file['size']=$f->getClientSize(); //文件尺寸
$file['uploadName']=sha1($file['originName']).'.'.$file['ext'];
$f->move(base_path().'/', $file['uploadName']); //参数1是所在目录
}
}
}
--------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。
Laravel入坑指南(5)——请求与响应的更多相关文章
- Elasticsearch入坑指南之RESTful API
Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...
- ElasticSearch入坑指南之概述及安装
---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...
- Phalcon如何切换数据库《Phalcon入坑指南系列 三》
本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能(项目配置.控制器.模型.增.删.改.查) 三.Phalcon ...
- electron入坑指南
electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...
- C语言入坑指南-被遗忘的初始化
前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...
- eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南
eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...
- Rust入坑指南:核心概念
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...
- Rust入坑指南:鳞次栉比
很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...
- Rust入坑指南:亡羊补牢
如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Ru ...
- Rust入坑指南:朝生暮死
今天想和大家一起把我们之前挖的坑再刨深一些.在Java中,一个对象能存活多久全靠JVM来决定,程序员并不需要去关心对象的生命周期,但是在Rust中就大不相同,一个对象从生到死我们都需要掌握的很清楚. ...
随机推荐
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.26)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- Oracle12c新增max_idle_time参数的学习与感触
Oracle12c新增max_idle_time参数的学习与感触 TLDR 其实任何软件出了新版本.readme 是很重要的. 尤其是数据库, 涉及到底层问题的. 比如这次遇到的Oracle的max_ ...
- 【转帖】Linux中如何取消ln链接?(linuxln取消)
https://www.dbs724.com/163754.html Linux系统使用ln命令可以快速创建链接,ln链接是指把文件和目录链接起来,当改变源时可以快速地改变整个目录下的文件和目录.有时 ...
- 【转帖】JVM 元数据区的内存泄漏之谜
https://www.infoq.cn/article/Z111FLot92PD1ZP3sbrS 一.问题描述 某天,SRE 部门观察到一个非常重要的应用里面有一台服务器的业务处理时间(Transa ...
- [转帖]十大主流Nehalem服务器横评(多图)
https://server.51cto.com/article/201820.html 作者:佚名2010-05-25 09:52:27 运维服务器运维 除了我们的两台基准服务器之外,本次横向评测活 ...
- [转帖]Spring Cloud 整合 SkyWalking
https://www.jianshu.com/p/e81e35dc6406 Java Agent 服务器探针 探针,用来收集和发送数据到归集器.参考官网给出的帮助 Setup java agent, ...
- 【码农教程】手把手教你学会Mockito使用
作者:京东零售 秦浩然 一.前期准备- 1.准备工作 <!--mockito依赖--> <dependency> <groupId>org.mockito</ ...
- echarts去掉y轴线、设置x轴线的颜色、x轴文字颜色
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- js加减乘除运算出现精度丢失
做乘法运算出现精度丢失 let aa= 2106.49 console.log( aa*10000 ) //21064899.999999996 console.log( Math.round(aa* ...
- Gin 框架之用户密码加密
目录 一.引入 二.密码加密位置 三.如何加密 四.bcrypt 库加密 4.1 介绍 4.2 优点: 4.3 使用 五.小黄书密码加密实践 一.引入 Gin是一个用Go语言编写的Web框架,而用户密 ...