zoukankan      html  css  js  c++  java
  • laravel框架总结(一) -- 请求和响应

    一.laravel请求

    1.获取请求

    1>获取请求的 URI

    path 方法会返回请求的 URI。所以,如果接收到的请求目标是 http://domain.com/foo/bar,那么 path 方法就会返回 foo/bar:

      $uri = $request->path();

    is 方法可以验证接收到的请求 URI 与指定的规则是否相匹配。使用此方法时你可以将 * 符号作为通配符:

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

    使用 url 方法,可以获取完整的网址:

      $url = $request->url();

    2>获取请求的方法

    method 方法会返回此次请求的 HTTP 动作。也可以通过 isMethod 方法来验证 HTTP 动作和指定的字符串是否相匹配:

      $method = $request->method(); if ($request->isMethod('post')) { // }

    2.获取输入数据

    获取特定输入值

    你可以通过 IlluminateHttpRequest 的实例,不需要去担心发出请求时使用的 HTTP 动作,因为它们获取输入数据的方式都是相同的。

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

    此外,可以使用 IlluminateHttpRequest 的属性访问用户输入。

      $name = $request->name;

    可以在 input 方法的第二个参数中传入一个默认值。当请求的输入数据不存在于此次请求时,就会返回默认值:

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

    如果是「数组」形式的输入数据,则可以使用「点」语法来获取数组:

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

    确认是否有输入值

    使用 has 方法。当该数据存在并且字符串不为空时,has 方法就会传回 true:

      if ($request->has('name')) { // }

    获取所有输入数据

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

      $input = $request->all();

    获取部分输入数据

    如果你想获取输入数据的子集,则可以使用 only 及 except 方法。这两个方法都接受单个数组或是动态列表作为参数:

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

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

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

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

     

    3.旧输入数据

    Laravel 可以让你将本次的输入数据保留,它只在下一次的请求内有效.可以使用 flash 方法保存 session,将数据保留到下个 HTTP 请求,然后就会被自动删除,这对于在表单验证失败后重新填入表单值相当有用.

    举例:登录操作

    登录失败,再次跳转到登录页面,此时我们不做任何操作,其实后台已经发送了一次请求到/user/login,进行登录失败的跳转操作,此时闪存内容还存在.

    我们再次刷新页面,会再次产生一次请求,此时闪存内容就不存在了

    将输入数据闪存至 Session

    IlluminateHttpRequest 实例的 flash 方法会将当前的输入数据存进session中,所以下次用户发出请求至应用程序时就可以使用它们:

      $request->flash();

    你也可以使用 flashOnly 及 flashExcept 方法将请求数据的子集保存至 Session:

      $request->flashOnly('username', 'email');

      $request->flashExcept('password');

    闪存输入数据至 Session 后重定向

    你可能需要将输入数据闪存并重定向至前一页,这时只要在重定向方法后加上 withInput 即可:

      return redirect('form')->withInput();

      return redirect('form')->withInput($request->except('password'));

    获取旧输入数据

    注意上面两种闪存方式使用session('username')是拿不到数据的,若要获取上一次请求后所闪存的输入数据,则可以使用 Request 实例中的 old 方法,

      $username = $request->old('username');

    Laravel 也提供了全局辅助函数 old。如果你要在Blade模板中显示旧输入数据,可以使用更加方便的 old 辅助函数:

      {{old('username')}}

     

    二.laravel响应

    1.基本响应

    1>返回一个字符串,指定的字符串会被框架自动转换成 HTTP 响应。

      Route::get('/', function () { return 'Hello World'; });

     

    2>返回一个完整的 Response 实例时,就能够自定义响应的 HTTP 状态码以及标头。

      use IlluminateHttpResponse;

      Route::get('home', function () {

        return (new Response($content, $status)) ->header('Content-Type', $value);

      });

    为了方便起见,你可以使用辅助函数 response:

      Route::get('home', function () {

        return response($content, $status) ->header('Content-Type', $value);

      });

    2.其它响应类型

    1>视图响应

    如果你想要控制响应状态码及标头,同时也想要返回一个视图作为返回的内容时,则可以使用 view 方法:

      return response()->view('hello', $data)->header('Content-Type', $type);

    当然,如果你没有自定义 HTTP 状态码及标头的需求,则可以简单的使用全局的 view 辅助函数。

      return view('hello',$data);

    2>JSON 响应

    json 方法会自动将标头的 Content-Type 设置为 application/json,并通过 PHP 的 json_encode 函数将指定的数组转换为 JSON:

      return response()->json(['name' => 'Abigail', 'state' => 'CA']);

    如果你想创建一个 JSONP 响应,则可以使用 json 方法并加上 setCallback:

      return response()->json(['name' => 'Abigail', 'state' => 'CA']) ->setCallback($request->input('callback'));

    3>文件下载

    download 方法可以用于生成强制让用户的浏览器下载指定路径文件的响应。download 方法接受文件名称作为方法的第二个参数,此名称为用户下载文件时看见的文件名称。最后,你可以传递一个 HTTP 标头的数组作为第三个参数传入该方法:

      return response()->download($pathToFile);

      return response()->download($pathToFile, $name, $headers);

    3.重定向

    1>简单重定向

    最简单的方式就是通过全局的 redirect 辅助函数:

      Route::get('dashboard', function () { return redirect('home/dashboard'); });

    有时你可能希望将用户重定向至前一个位置,例如当提交一个无效的表单之后。这时可以使用全局的 back 辅助函数来达成这个目的:

      Route::post('user/profile', function () { // 验证该请求... return back()->withInput(); });

    2>重定向至命名路由

    当你调用 redirect 辅助函数且不带任何参数时,将会返回 IlluminateRoutingRedirector 的实例,你可以对该 Redirector 的实例调用任何方法。举个例子,要生成一个 RedirectResponse 到一个命名路由,你可以使用 route 方法:

    return redirect()->route('login');

    如果你的路由有参数,则可以将参数放进 route 方法的第二个参数:

    // 重定向到以下 URI: profile/{id} return redirect()->route('profile', [1]);

    如果你要重定向至路由且路由的参数为 Eloquent 模型的「ID」,则可以直接将模型传入,ID 将会自动被提取:

    return redirect()->route('profile', [$user]);

    3>重定向至控制器行为

    请记得,你不需要指定完整的命名空间,因为 Laravel 的 RouteServiceProvider 会自动设置默认的控制器命名空间:

    return redirect()->action('HomeController@index');

    当然,如果你的控制器路由需要参数的话,你可以传递它们至 action 方法的第二个参数:

    return redirect()->action('UserController@profile', [1]);

    4>重定向并加上 Session 闪存数据

    通常重定向至新的 URL 时会一并写入闪存数据至session。所以为了方便,你可以利用链式调用的方式创建一个 RedirectResponse 的实例并闪存数据至 Session。这对于在一个动作之后保存状态消息相当方便:

      Route::post('user/profile', function () {

        // 更新用户的个人数据...

        return redirect('dashboard')->with('status', 'Profile updated!');

      });

    当然,在用户重定向至新的页面后,你可以获取并显示session的闪存数据,注意这里闪存的信息和使用使用$request->flash()闪存数据提出方法不同,old('status')是取不到的,要使用session('status')

      @if (session('status'))

        <div class="alert alert-success"> {{ session('status') }} </div>

      @endif

     
     
  • 相关阅读:
    通过注册表选择文件默认打开方式
    oracle的imp和exp
    oracle 10g正则表达式 REGEXP_LIKE 用法
    oracle varchar 和varchar2的区别
    Oracle lower(Upper)函数|大小写|
    NC资金管理对外付款自动选上“网上支付”设置
    wmsys.wm_concat的几个用法
    GridView使用初步
    JavaScript学习笔记(一)—细节问题
    图片水印功能
  • 原文地址:https://www.cnblogs.com/ghjbk/p/6636881.html
Copyright © 2011-2022 走看看