PHP Laravel学习之HTTP请求参数获取
官方文档传送门:http://laravelacademy.org/post/7856.html
依赖
在A类中有B类的实例,则称A对B有一个依赖
依赖注入
在A类中获取到的B类的实例是通过外部传进来的这种就称作依赖注入
访问请求实例
在控制器中获取当前请求实例,只需要在构造方法或普通方法中对Illuminate\Http\Request 类进行依赖注入即可,具体实现如下:
在App\Http\Controllers\UserController.php控制器下的store方法进行依赖注入获取当前请求的name值
public function store(Request $request){
$name = $request -> input('name');
echo "$name";
}
创建控制器路由访问该控制器下的store方法:
Route::get('store','UserController@store');
浏览器中输入:http://localhost:8000/store?name=12,结果如下:
路由参数
如果还期望在控制器方法中获取路由参数,只需要将路由参数置于其它依赖之后即可,具体实现如下:
在App\Http\Controllers\UserController.php控制器中通过依赖注入获取路由里的参数
我们稍微对上述store方法和路由进行一下小小的修改:
//store方法修改为
public function store(Request $request,$id){
$name = $request -> input('name');
echo "name:$name "." id:$id";
}
//web.app下路由修改为:
Route::get('store/{id}','UserController@store');
浏览器中输入http://localhost:8000/store/1?name=12,结果如下:
通过路由闭包访问请求
这种情况就是直接在路由里通过注入Illuminate\Http\Request,在执行闭包函数的时候服务容器会自动注入输入请求,具体实现如下,
Route::get('re',function(Illuminate\Http\Request $request){
$name = $request -> input('name');
echo "$name";
});
在浏览器中输入:http://localhost:8000/re?name=12,结果如下:
请求路径 & 请求方法
Illuminate\Http\Request 继承自 Symfony\Component\HttpFoundation\Request 类,提供了多个方法来检测应用的 HTTP 请求,下面我们来演示其提供的一些获取请求路径和请求方式的方法:
获取请求路径
path方法将会返回请求的路径信息,如果请求URL是 http://localhost:8000/user/1,则 path 方法将会返回 user/1,具体实现如下:
路由如下:
Route::get("user/{id}",function(Illuminate\Http\Request $request){
$path = $request -> path();
echo $path;
});
访问上述路由结果如下:
is 方法允许你验证请求路径是否与给定模式匹配。该方法参数支持 * 通配符
修改上述路由如下:
Route::get("user/{id}",function(Illuminate\Http\Request $request){
if($request->is('user/1')){
echo '你的路径对了哦';
}else{
echo "你好像输错路径了哦";
}
});
访问对的路径:http://localhost:8000/user/1
访问错的路径:http://localhost:8000/user/3
通配符*
修改路由里的闭包方法如下:
Route::get("user/{id}",function(Illuminate\Http\Request $request){
if($request->is('user/*')){
echo '你的路径对了哦';
}else{
echo "你好像输错路径了哦";
}
});
路径一直都匹配;
获取请求URL
想要获取完整的 URL,而不仅仅是路径信息,可以使用请求实例提供的 url 或 fullUrl 方法, url 方法返回不带查询字符串的 URL,而 fullUrl 方法返回结果则包含查询字符串,具体实现如下:
依旧把Illuminate\Http\Request依赖注入到路由里:
Route::get('url',function(Illuminate\Http\Request $request){
// 不包含查询字符串
$url = $request -> url();
echo "$url";
// 包含查询字符串
$url_with_query = $request->fullUrl();
echo "</br> $url_with_query";
});
访问:http://localhost:8000/url?name=l 结果如下:
获取请求方法
method 方法将会返回 HTTP 请求方式。你还可以使用 isMethod 方法来验证 HTTP 请求方式是否匹配给定字符串,具体实现如下:
Route::get("mo",function(Illuminate\Http\Request $request){
$method = $request->method(); // GET/POST
echo "$method</br>";
if($request->isMethod('post')){
echo "POST提交";
}else{
echo "其他提交";
}
});
访问:http://localhost:8000/mo 结果如下: