• Laravel 的HTTP请求#


    获取请求#

    要通过依赖注入的方式来获取当前HTTP请求的实例,你应该在控制器方法中类型提示IlluminateHttpRequest

    传入的请求的实例通过 服务容器自动注入:

    <?php

    namespace AppHttpControllers;

    use IlluminateHttpRequest;

    class UserController extends Controller

    {

      /*

        存储一个新用户

        @param Request $request

        @return Response

      */

      public function store(Request $request)

      {

        $name = $request->input('name');

      }

    }

    依赖注入 & 路由参数#

    如果控制器方法要从路由参数中获取数据,则应在其他依赖项之后列出路由参数。例如,如果你的路由是这样定义的:

    Route::put('user/{id}','UserController@update');

    如下所示使用类型提示 IlluminateHttpRequest ,就可以通过定义控制器方法获取路由参数id:

    <?php 

    namespace AppHttpController;

    use IlluminateHttpRequest;

    class UserController extends Controller

    {

      /*

      更新指定的用户

      @param Request $request

      @param string $id

      @return Response

      */

      public function update(Request $request,$id)

      {

        //

      }

    }

    通过路由闭包获取请求#

    你也可以在路由闭包中类型提示 IlluminateHttpRequest类,服务容器在执行时会自动将当前请求注入到闭包中:

    use IlluminateHttpRequest;

    Route::get('/',function(Request $request){});

    请求路径&方法#

    IlluminateHttpRequest 实例提供了多种方法来检查应用程序的HTTP请求,并继承了

    SymfonyComponentHttpFoundationRequest 类。下面是该类几个有用的方法:

    获取请求路径#

    path 方法返回请求的路径信息。也就是说,如果传入的请求的目标地址是 http://domain.com/foo/bar 那么path 将

    返回 foo/bar;

    $uri = $request->path();

    is 方法可以验证传入的请求路径和指定规则是否匹配。使用这个方法时,你也可以传递一个*字符作为通配符:

    if ($request->is('admin/*')){}

    获取请求的URL#

    你可以使用url 或者fullUrl方法去获取传入请求的完整URL,url方法返回不带有查询字符串的URL,而fullUrl方法的返回值

    包含查询字符串:

    //WIthout Query String ...

    $url = $request->url();

    //With Query String ...

    $url = $request->fullUrl();

    获取请求方法#

    对于传入的请求method方法将返回HTTP的请求方式。你也可以使用isMethod 方法去验证HTTP的请求方式于指定

    规则是否相配:
    $method = $request->mothod();

    if($request->isMethod('post')){}

    输入预处理&规范化#

    默认情况下,Laravel在应用程序的全局中间件堆栈中包含了TrimStrings 和 ConvertEmptyStringsToNull 两个中间件。

    这些中间件由AppHttp|Kernel 类列在堆栈中。他们会自动处理请求上所有传入的字符串字段,并将空的字符串

    字段转变为null值。这样你就不用再担心路由和控制器中数据规范化的问题。

    如果你想停用这些功能,可以从应用程序的中间件堆栈中删除这两个中间件,只需在AppHttpKernel类的

    $middleware 属性中移除他们。

    获取输入#

    获取所有输入数据#

    你可以使用all 方法以 数组 形式获取到所有输入数据:

    $intput = $request->all();

    获取指定输入值#

    使用几种简单的方法(不需要特别指定那个HTTP动作),就可以访问IlluminateHttpRequest 实例中所有的用户输入,

    也就是说无论是什么样的HTTP动作,input方法都可以被用来获取用户输入数据:

    $name = $request->input('name');

    你可以给input 方法的第二个参数传入一个默认值。如果请求的输入值不存在请求上,就返回默认值:

    $name = $request->input('name','Sally');

    如果传输表单数据中包含[数组]形式的数据,那么可以使用[点]语法来获取数组:

    $name = $request->input('prodects.0.name');

    $names = $request->input('products.*.name');

    从查询字符串获取输入#

    使用input 方法可以从整个请求中获取输入数据(包括查询字符串),而 query  方法可以只从查询字符串中获取输入数据

    $name = $request->query('name');

    如果请求的查询字符串收不存在,则将返回这个方法的第二个参数:

    $name = $request->query('name','Helen');

    你可以不提供参数调用query方法来以关联数组的行还是检索所有查询字符串值:

    $query = $request->query();

    通过动态属性获取输入#

    你也可以通过IlluminateHttpRequest 实例的动态属性来获取用户输入。例如,如果你应用的表单中包含name字段,

    那么可以向这样访问该字段的值:

    $name = $request->name;

    Laravel 在处理动态属性的优先级是,先在请求的数据中查找,如果没有,再到路由参数汇总查找。

    获取JSON输入信息#

    如果发送到应用程序的请求数据是json,只要请求的Content-Type 标头正确设置为 application/json 就可以通过Input 方法

    访问JSON数据,你甚至可以使用[点]语法来读取json数组:
    $name = $request->input('user.name');

    获取部分输入数据#

    如果你需要获取输入数据的子集,则可以用only和except 方法,这两个方法都接收 数组或 动态列表作为参数

    $input = $request->only(['username','password']);

    $input = $request->only('username','password');

    $input= $request->except(['credit_card']);

    $input = $request->except('credit_card');

    only 方法会返回所有你指定的键值对,但不会返回请求汇总不存在的键值对。

    确定是否存在输入值#

    要判断请求是否存在某个值,可以使用has方法。如果请求汇总存在该值,has方法就会返回true;

    if($request->has('name'))

    {

    }

    当提供一个数组作为参数时,has方法将确定是否存在数据中所有给定的值:

    if($request->has(['name','email']))

    {

      //

    }

    如果你想确定请求是否存在值并且不为空,可以使用filled方法;

    if($request->filled('name'))

    {

      //

    }

  • 相关阅读:
    AOD.net
    C# Eval()和Bind()
    .Net使用微軟自帶的用戶驗證和登錄授權
    .Net面試4套
    .Net面試題
    MVC开发模式
    .Net自帶Ajax和GridView
    HTML系列(HTMl+CSS+JavaScript+Jquery)--un
    .Net母版页
    .NetDOM操作--un
  • 原文地址:https://www.cnblogs.com/simadongyang/p/8456823.html
Copyright © 2020-2023  润新知