laravel_基础_Request请求/Cookie/文件上传
1.获取Request请求(表单数据)
Laravel中一般通过控制器方法依赖注入来获取当前请求的Request实例。
这里以一个隐式控制器测试
创建RequestController.php
php artisan make:controller RequestController
routes.php定义路由如下:
Route::controller('request','RequestController');
定义测试方法:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class RequestController extends Controller
{
public function getTest(Request $request)
{
// 获取所有get、post提交的表单数据
var_dump($request->all());
// 获取某一个表单项数据,如果没有该字段则去后边的默认值,如defaultName
var_dump($request->input('name','defaultName'));
// 判断输入参数名是否存在,has方法
if($request->has('name'))
echo $request->input('name');
// 获取部分输入值,可使用only方法
$onlyData = $request->only('name','age');
// 想要排除部分输入参数值,可使用except方法
$exceptData = $request->except('age');
}
}
2.获取请求URL及请求方法
public function getUrl(Request $request)
{
// 匹配request/*的URL才能继续访问
if(!$request->is('request/*')){
abort(404);
}
// 获取访问方法路径,path方法
$uri = $request->path();
// 获取访问URL,url方法
$url = $request->url();
echo $uri;
echo '<br>';
echo $url;
echo '<br>';
// 非get请求不能访问
if(!$request->isMethod('get')){
abort(404);
}
// 获取访问方法 method方法
$method = $request->method();
echo $method;
}
3.获取上次请求的数据
flash 方法将请求数据暂时保存到session中
old 方法获取session中保存的数据,获取到数据后就会将session中保存的请求数据销毁
public function getOld(Request $request)
{
// flash方法,将这次请求的数据暂时保存到session中
$request->flash();
return redirect('/request/current')->withInput();
}
public function getCurrent(Request $request)
{
// old方法,获取session中上次保存的数据,然后销毁session中的数据
$old = $request->old();
var_dump($old);
}
浏览器访问http://xxx/request/old?name=name
会跳转到http://xxx/request/current
同时将上次请求的name打印出来,再次刷新本页name消失。
4.获取Cookie数据
用法:
// 获取cookie
$request->cookie();
// 设置cookie
$response->withCookie();
实例:
定义一个获取cookie的方法
public function getCookie(Request $request){
$cookies = $request->cookie();
dd($cookies);
}
浏览器访问xxx/cookie即可看到所有cookie
定义一个设置cookie的方法
public function getAddCookie(){
$response = new Response();
// 第一个参数是cookie名,第二个参数是cookie值,第三个参数是有效期(分钟)
$response->withCookie(cookie('website','LaravelAcademy.org',1));
// 如果想要cookie长期有效使用如下方法
// $response->withCookie(cookie()->forever('name', 'value'));
return $response;
}
【说明】:这里用到Response,需要顶部use
use Illuminate\Http\Response;
访问xxx/add-cookie添加cookie,然后再访问xxx/cookie你会发现多了刚才设置的那一条cookie。
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('上传文件为空!');
}
// 获取文件信息,包括文件名,缓存路径,mimeType,缓存文件名等
$file = $request->file('file');
// dd($file);
// 判断文件上传过程中是否出错
if(!$file->isValid()){
exit('文件上传出错!');
}
// 拼接最终文件保存路径,laravel5.1是这个写法,我5.2获取不到,改成下边写法即可。
// $destPath = realpath(public_path('images'));
// 拼接最终文件保存路径(适用于laravel5.2)
$destPath = public_path('images');
if(!file_exists($destPath))
mkdir($destPath,0755,true);
// 获取当前文件原始名
$filename = $file->getClientOriginalName();
// move() 移动上传好的文件到指定目录。该函数接收两个参数,第一个是保存路径,第二个是文件名
if(!$file->move($destPath,$filename)){
exit('保存文件失败!');
}
exit('文件上传成功!');
}
该文件上传实例是 SymfonyComponentHttpFoundationFileUploadedFile类的实例