php--laravel框架接收http请求时携带的参数,及定义路由是带的参数。
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'; } });
访问方式:http://www.laravel.com/me
————————————————
版权声明:本文为CSDN博主「@Winner」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zxh7770/article/details/94358417