作为互联网典型的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、响应
11
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)多文件上传:
原文:https://www.cnblogs.com/ddcoder/p/13359342.html