一.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('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

 
 

转载于:https://www.cnblogs.com/ghjbk/p/6636881.html

laravel框架总结(一) -- 请求和响应相关推荐

  1. python的Web框架,Django框架中的请求与响应

    请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程 视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第 ...

  2. 应用服务器与WSGI协议以及flask后端框架总结(后端接收请求返回响应的整个流程)...

    上次遗留了两个问题,先说一下自己的看法 问题: 1.明明一个线程只能处理一个请求,那么栈里的元素永远是在栈顶,那为什么需要用栈这个结构?用普通变量不行吗. 2._request_ctx_stack和_ ...

  3. 【SSM框架系列】SpringMVC的请求和响应

    request和response request对象的作用 获取请求参数 作为域对象存取数据 获取请求头 请求转发 response功能 回写数据,JSON格式字符串 页面跳转(请求重定向) Spri ...

  4. python sanic 向别的服务器发送post请求_Sanic框架请求与响应实例分析

    本文实例讲述了Sanic框架请求与响应.分享给大家供大家参考,具体如下: 前面介绍了Sanic框架的路由,这里接着介绍Sanic框架的请求与响应. 简介 Sanic是一个类似Flask的Python ...

  5. laravel框架中文手册_laravel请求参数校验方法

    对于后端开发而言,前端request请求中的参数校验是一个必不可少的环节.无论传来的参数是id还是email还是其他的参数,我们都要对参数的类型.大小.格式等等做这样或者那样的校验,然后才进行逻辑处理 ...

  6. 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作

    Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...

  7. Flask框架 请求与响应 模板语法

    目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) F ...

  8. JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器

    Servlet入门 MVC实战项目 仓储管理系统 JavaWeb入门介绍 Http协议 Http请求数据格式 Http响应数据格式 Web实战Demo:自定义服务器 对比Https协议 总结 Redi ...

  9. php laravel框架项目实例

    laravel框架评价,转知乎的, laravel是个好框架,我也在学习和使用,并且在公司里推广,新项目就是用的laravel.但是我觉得题主说thinkphp是垃圾我是不同意的,国外的月亮真的就更圆 ...

最新文章

  1. 支持向量机SVM序列最小优化算法SMO
  2. java学习笔记15--多线程编程基础2
  3. linux合并两个文件 去重复,c - 在Linux中使用C,通过系统调用将两个文本文件合并为一个新文件(来回换行) - 堆栈内存溢出...
  4. linux 下载rpm包到本地,createrepo:创建本地YUM源
  5. 再见Xshell!这个开源的终端工具更酷炫!
  6. spring属性注入的set方法注入
  7. ESlint全局安装(安装教程) - cmd篇
  8. Python脚本实现启停app获取资源占比信息
  9. micropython入门教程-MicroPython入门教程之语法基础
  10. 利用Outlook应用程序接口执行Shellcode
  11. 在真机上 模拟GPS
  12. ES拼音中文智能提示suggest
  13. DES入盒前的CPA攻击
  14. 什么东西能帮助睡眠?曾经五年睡不好觉的朋友在用几个东西
  15. 德克萨斯长角牛 --最短路径
  16. 前端小技巧(2)-performance.timing属性介绍
  17. 韩顺平java-枚举和注解异常包装类
  18. 论latex插入图片最好的方法!
  19. 想用自己电脑做服务器并且绑定域名建一个个人网站应该怎么做
  20. 应届毕业生北京租房经验

热门文章

  1. Oracle10.2.0.1.0升级Oracle10.2.0.2.0补丁安装指南(转载)
  2. 浅谈JavaScript中的对象和类型(上)
  3. 姜黄的毒副作用调研汇总(调研手稿一)
  4. hive中的单分区与多分区在hadoop上的对应关系
  5. 2020Alibaba数学竞赛预选赛第一轮参考答案
  6. 详细解释到底啥是共轭先验(用本科知识来解释)
  7. 斯坦福大学机器学习第六课“神经网络的表示(Neural Networks: Representation)”
  8. 云服务器的操作系统是什么,服务器操作系统是什么?云服务器的操作系统怎么选择...
  9. linux cvs服务,Linux环境下轻松搭建CVS服务器
  10. 面试高频问题:HashMap实现原理