控制器之Request
简介
- laravel中的请求使用的是symfony/http-foundation组件。
- 请求里面存放了$_GET,$_POST.$COOKIE,$FILES,$SERVER等数据。
获取请求中的值
在app/Http/Controllers/StudentController.php中:
namespace App\Http\Controllers;
use App\Student;
use Illuminate\Http\Request;
class StudentController extends Controller
{
public function request1(Request $request)
{ ...代码写在此处 }
}
通过参数获取request实例
通过参数获取Request实例,注意是use Illuminate\Http\Request,在PHPStorm中,在控制器方法的参数中输入Request会看到:
注意选择的是Illuminate\Http这个命名空间。选择后,会在页面顶部自动引入:
use Illuminate\Http\Request;
获取url中的查询字符串参数
比如如下链接:http://localhost/laravel/public/request1?name=wubin&sex=boy
要获取链接中的name属性的值:
echo $request->input('name');
当取一个可能不存在的值的时候,可以给其一个默认值:
echo $request->input('age', '未知');
也可以判断是否有这个参数:
if ($request->has('name')) {
echo $request->input('name');
} else {
echo '无参数';
}
也可以获取全部查询字符串的参数,得到一个数组:
$res = $request->all();
var_dump($res);
// array(2) { ["name"]=> string(5) "wubin" ["sex"]=> string(3) "boy" }
判断请求类型
返回请求类型
echo $request->method();
// 得到GET 或者 POST
判断请求类型是否为某个类型
if ($request->isMethod('POST')) {
echo 'yes';
} else {
echo 'no';
}
判断请求是否是ajax请求
var_dump($request->ajax());
判断请求路径是否符合某种特定格式
修改路由配置文件app/routes.php,修改路由地址:
Route::any('student/request1', [
'uses' => 'StudentController@request1'
]);
那么当前的访问地址就会变为:localhost/laravel/public/student/request1?name=wubin&sex=boy
在StudentController.php中:
$res = $request->is('student/*');
var_dump($res);
那么打印得到的就是true;
如果访问地址:localhost/laravel/public/request1?name=wubin,那么这条语句得到的就是false,因为其url的格式不符合student/*。
获取当前发送请求的url
echo $request->url();
注意,其最终得到的url不包含查询字符串!如发送请求的地址是:localhost/laravel/public/student/request1?name=wubin&sex=boy,最终执行的结果:
http://localhost/laravel/public/student/request1