php–laravel框架接收http请求时携带的参数,及定义路由是带的参数。
通过http的形式访问路由,通过http携带参数;
1,浏览器中输入:http://www.redshop.com/admins/adminlist?curr=2&limit=10
小编这里是用到了layui的分页技术,鼓捣了好几天才得到正确的结果。
2,路由的定义
这里给小伙伴提醒一下哈,小编这里就有一个误区,通过http访问时候携带的参数跟路由中传递的参数是有区别的,在定义路由的时候如果要是携带参数【Route::match([‘get’,‘post’],’/adminlist/{参数1}/{参数2}’,‘AdminListController@index’);】那么在请求路由的时候一定要带着这两个参数,http://www.redshop.com/admins/admins/参数1/参数2, 通过上面的图中浏览器的地址,我们并没有携带这两个参数。而是前端通过http的方式给我们传递了两个参数【http://www.redshop.com/admins/adminlist?curr=2&limit=10】 这个时候我们就要通过控制器里面的依赖注入也就是通过Request 接收。详细看控制器中书写
Route::match(['get','post'],'/adminlist','AdminListController@index');
3,控制器接收参数
public function index(Request $request){
//接收http请求时带的参数。http://www.redshop.com/admins/adminlist?curr=2&limit=10
//数据总条数
$count = \DB::select("select count(id) as num from admin");
$limit = $request->input('limit');
$curr = $request->input('curr');
$startno = ($curr-1)*$limit;
//$data = \DB::table('admin')->get();
$data = \DB::select("select * from admin limit $startno,$limit");
$data_arr = [];
foreach ($data as $v){
//@<winner>格式化时间
$v->create_time = date('Y-m-d H:i:s',$v->create_time);
$v->last_time = date('Y-m-d H:i:s',$v->last_time);
unset($v->pass);
$data_arr[] = $v;
}
$data = $this->formatData($data_arr,$count[0]->num);
return $data;
}
通过http携带参数访问路由,并接收:
0,浏览器中输入:http://localhost:8000/store?name=12,结果如下:
1,创建控制器路由访问该控制器下的index方法:
Route::match(['get','post'],'/stores','StoresController@index');
2,创建控制器
在控制器中获取当前请求实例,只需要在构造方法或普通方法中对Illuminate\Http\Request 类进行依赖注入即可,具体实现如下:
在App\Http\Controllers\UserController.php控制器下的index方法进行依赖注入获取当前请求的name值
说白了,就是通过Request接收数据
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class StoresController extends Controller
{
//接收http请求路由时携带的参数
public function index(Request $request){
//http://www.laravel.com/stores?name=winner
//接收http请求的参数name,并输出。
$name = $request->input('name');
echo $name;
}
}
通过路由定义参数,并且通过http请求时访问
0,浏览器中输入:http://www.laravel.com/stores/id=1?name=winner
1,对stores的路由进行稍微的改动
Route::match(['get','post'],'/stores/{id}','StoresController@index');
2,对刚刚stores控制器下面的index方法进行修改
class StoresController extends Controller
{
//接收http请求路由时携带的参数
public function index(Request $request,$id){
//http://www.laravel.com/stores?name=winner
//接收http请求的参数name,并输出。
//$name = $request->input('name');
//echo $name;
$name = $request->input('name');
echo 'name='.$name .'---'.'id='.$id;
}
}
通过路由闭包访问请求
访问方式:http://www.laravel.com/rest?name=winner
路由
// 通过路由闭包访问请求
Route::get('/rest',function(Illuminate\Http\Request $request){
$name = $request->input('name');
echo $name;
});
请求路径&请求方法
Illuminate\Http\Request 继承自 Symfony\Component\HttpFoundation\Request 类,提供了多个方法来检测应用的 HTTP 请求,下面我们来演示其提供的一些获取请求路径和请求方式的方法:
获取请求路径
path方法将会返回请求的路径信息,如果请求URL是 http://www.laravel.com/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 '你的路径有问题';
}
});
访问对的路径:www.laravel.com/user/1
访问错的路径:www.laravel.com/user/2
通配符*
只要是路由没问题,路径一直都匹配。
Route::get('/user/{id}',function(Illuminate\Http\Request $request){
if ($request->is('user/*')) {
echo '你的路径没毛病';
}else{
echo '你的路径有问题';
}
});
访问:http://www.laravel.com/user/2
访问:http://www.laravel.com/user/3
访问:http://www.laravel.com/use1r/3
因为user是路由,user后面的都算是路径,这样输入路由就不正确了。
访问:http://www.laravel.com/user/3/3
因为路由后面只有一个参数,输入多个参数路由就不对了。
获取请求URL
想要获取完整的 URL,而不仅仅是路径信息,可以使用请求实例提供的 url 或 fullUrl 方法, url 方法返回不带查询字符串的 URL,而 fullUrl 方法返回结果则包含查询字符串,具体实现如下:
依旧把Illuminate\Http\Request依赖注入到路由里:
//获取请求url
Route::get('/url/{id}',function(Illuminate\Http\Request $request){
$url = $request->url();
echo $url;
//包含查询字符串,也就是通过http的方式请求,在请求时通过 ? 携带的参数。http://www.laravel.com/url/id=1?name=winner
$url_with_query = $request->fullUrl();
echo "</br> $url_with_query";
});
访问路径:http://www.laravel.com/url/id=1?name=winner
获取请求方法
method 方法将会返回 HTTP 请求方式。你还可以使用 isMethod 方法来验证 HTTP 请求方式是否匹配给定字符串,具体实现如下:
//获取请求方法
Route::get('/me',function(Illuminate\Http\Request $request){
if ($request->isMethod('get')) {
echo '我是get请求';
}else{
echo '我是其他方式请求,反正不是get';
}
});