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.获取输入数据

获取特定输入值

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

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

此外,可以使用 Illuminate\Http\Request 的属性访问用户输入。

  $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

Illuminate\Http\Request 实例的 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 Illuminate\Http\Response;

  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 辅助函数且不带任何参数时,将会返回 Illuminate\Routing\Redirector 的实例,你可以对该 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(‘[email protected]‘);

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

return redirect()->action(‘[email protected]‘, [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

时间: 2024-08-18 16:07:12

laravel框架总结(一) -- 请求和响应的相关文章

laravel框架一次请求的生命周期

第一件事所有的请求都会被web服务器(Apache/Nginx)导向public/index.php文件.index.php文件载入Composer生成的自动加载设置,然后从bootstrap/app.php脚本获取Laravel应用的实例,laravel的第一个动作就是创建服务容器实例. HTTP/Console 内核接下来,请求被发送到 HTTP 内核或 Console 内核,这取决于进入应用的请求类型.这两个内核是所有请求都要经过的中央处理器,让我们聚焦在位于 app/Http/Kerne

Django REST框架-请求与响应

用前面的那个文件,继续填写 教程2:请求和响应 从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象 REST框架引入了Request扩展常规的对象HttpRequest,并提供了更灵活的请求解析.Request对象的核心功能是request.data属性,这与request.POST使用Web API 相似但更有用. request.POST # Only handles form data. Only works for 'POST' method. r

关于laravel框架的跨域请求/jsonp请求的理解

最近刚接触laravel框架,首先要写一个跨域的单点登录.被跨域的问题卡了两三天,主要是因为对跨域这快不了解,就在刚才有点茅塞顿开的感觉,我做一下大概整理,主要给一些刚接触摸不着头脑的看,哪里写得不对的,也请大神指点,言归正传: 1.先用通俗易懂的话说下原理和几种跨域的方式,因为网上一搜都是追对某一种方式的专业性解答,我是消化不了多少. 第一种:jsonp 方式,这是什么方式呢,先要说一说JavaScript,在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin P

Flask框架 请求与响应 &amp; 模板语法

目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) Flask 中的 Request(请求) Flask 模板语言简单使用 Flask框架参考手册 原文地址:https://www.cnblogs.com/guokaifeng/p/11587311.html

drf框架 ----- 接口 cbv生命周期 请求\解析\响应组件 序列化组件 三大认证 其他组件

drf框架 全称: django-rest framework (framework:框架) 理论知识点 大纲 接口 接口: 联系连个物质的媒介, 完成信息交互 web程序中 : 联系前台页面与后台数据库的媒介 web 接口的组成 : url: 统一资源定位符 长得像返回数据的链接 请求参数: 前台按照指定的key 提供数据给后台 响应数据: 后台与数据库交互后将数据反馈给前台 restful接口规范 接口规范:就是为了采用不同的后台语言,也能使用同样的接口获取到同样的数据 如何写接口:接口规范

django-rest framework 框架生命周期 请求模块 渲染模块 解析模块 异常模块 响应模块

一.DRF框架 1.安装 pip3 install djangorestframework 2.drf框架规矩的封装风格 按功能封装,drf下按不同功能不同文件,使用不同功能导入不同文件 from rest_framework.views import APIView #视图,以后都继承这个,这个也是继承views后一顿操作完善了功能 from rest_framework.response import Response #响应 from rest_framework.request impo

Laravel框架学习(四)

一. composer的安装: 1.Composer是什么? 是 PHP 用来管理依赖(dependency)关系的工具. 你可以在自己的项目中声明所依赖的外部工具库(libraries), Composer 会帮你安装这些依赖的库文件. 2.网址:https://getcomposer.org 下载:https://getcomposer.org/download/ 中国全量镜像:http://pkg.phpcomposer.com/ 启用本镜像服务命令: composer config -g

Laravel框架怎样使用阿里云ACE缓存服务

Laravel框架怎样使用阿里云ACE缓存服务 之前我写了一篇在 Laravel 4 框架中使用阿里云 OCS 缓存的文章.介绍了怎样通过扩展 Laravel 4 来支持须要 SASL 认证的阿里云 OCS 缓存服务.有网友问我.ACE 的缓存怎么在 Laravel 4 中使用.我本来认为应该能够全然用同样的办法,后来自己尝试的时候才发现,ACE 的缓存区别很大.所以再写一篇,介绍一下怎样在 Laravel 框架中使用阿里云 ACE 的缓存服务. 怎样扩展 Laravel 的缓存驱动 在 Lar

Laravel框架如何使用阿里云ACE缓存服务

Laravel框架如何使用阿里云ACE缓存服务 之前我写了一篇在 Laravel 4 框架中使用阿里云 OCS 缓存的文章,介绍了如何通过扩展 Laravel 4 来支持需要 SASL 认证的阿里云 OCS 缓存服务.有网友问我,ACE 的缓存怎么在 Laravel 4 中使用.我本来觉得应该可以完全用相同的办法,后来自己尝试的时候才发现,ACE 的缓存差别非常大.所以再写一篇,介绍一下如何在 Laravel 框架中使用阿里云 ACE 的缓存服务. 如何扩展 Laravel 的缓存驱动 在 La