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,结果如下:

获取到请求中的name

路由参数

如果还期望在控制器方法中获取路由参数,只需要将路由参数置于其它依赖之后即可,具体实现如下:
在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 结果如下:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 3,115评论 0 12
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,616评论 1 92
  • 访问请求实例 要通过依赖注入获取当前 HTTP 请求实例,需要在控制器的构造函数或方法中对 Illuminate\...
    伊Summer阅读 1,671评论 0 3
  • 笔者是一枚程序员,同时也是个美食爱好者,一直想用技术做点自己的事情,刚好最近开始研究逆向工程,实现下厨房作品自动点...
    Aprilsky阅读 2,099评论 0 9