热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Laravel5.1学习笔记6响应

基本响应附加头信息到响应附加Cookie到响应其他响应View视图响应JSON响应File下载重定向重定
  • 基本响应
    • 附加头信息到响应
    • 附加COOKIE到响应
  • 其他响应
    • View视图响应
    • JSON响应
    • File下载
  • 重定向
    • 重定向到命名路由
    • 重定向到控制器Action
    • 附带闪回Session数据重定向
  • 响应宏

 

#基本响应

从路由返回字串

最基本的响应就是从 Laravel 的路由返回字串:

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

建立自定义响应

但是以大部分的路由及控制器所执行的动作来说,你需要返回完整的 Illuminate\Http\Response 实例或是一个视图。返回一个完整的 Response 实例时,你能够自定义响应的 HTTP 状态码以及响应头。Response 实例继承了 Symfony\Component\HttpFoundation\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);
});

提示: 有关 Response 方法的完整列表可以参照 API 文档 以及 Symfony API 文档.

 

#附加头信息到响应

要记住多数响应方法是链式调用的, 用以建立流畅的响应。如下:

return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');

#附加COOKIE到响应 (这里省去不少废话,直接看代码理解,也不明白鬼佬的文档这么多废话)

return response($content)->header('Content-Type', $type)
->withCOOKIE('name', 'value');

withCOOKIE 方法接受更多的可选引数,使你能够定制化COOKIE的属性

->withCOOKIE($name, $value, $minutes, $path, $domain, $secure, $httpOnly)

默认所有COOKIEs 都被Laravel加密和签名,这样它们不能被客户随意改变, 如果你不想加密某些COOKIEs, 你可以使用App\Http\Middleware\EncryptCOOKIEs中间件的$except 属性

/**
* The names of the COOKIEs that should not be encrypted.
*
* @var array
*/
protected $except = [
'COOKIE_name',
];

#其他响应类型

使用辅助方法 response 可以轻松的产生其他类型的响应实例。当你调用辅助方法 response 且不带任何参数时,将会返回 Illuminate\Contracts\Routing\ResponseFactory Contract 的实现。这个Contract 提供了一些有用的方法来产生响应。

View响应

如果你需要控制响应状态和响应头,但也需要返回一个view作为响应内容,你可用view方法

return response()->view('hello', $data)->header('Content-Type', $type);
如果不需要传送定制HTTP状态,或者定制头信息,你可以使用全局View辅助方法
 

建立 JSON 响应

json 方法会自动将响应头的 Content-Type 配置为 application/json, 同时转换给定的array数组到JSON,用json_encode PHP方法

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

建立 JSONP 响应

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

建立文件下载的响应

第一个参数是给定的下载目录,第二个是保存的文件名, 第三个是HTTP头信息

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

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

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

Note: Symfony HttpFoundation, which manages file downloads, requires the file being downloaded to have an ASCII file name.

 

 

#重定向

 

重定向响应通常是类 Illuminate\Http\RedirectResponse 的实例,并且包含用户要重定向至另一个 URL 所需的响应头。有很多种方法来产生重定向RedirectResponse实例, 最简单的方法是使用全局redirect辅助方法

Route::get('dashboard', function () {
return redirect('home/dashboard');
});
有时候,你希望把用户重定向到它之前的位置, 比如表单提交失败,你可以用全局 back 辅助方法
Route::post('user/profile', function () {
// Validate the request...

return back()->withInput();
});

返回重定向

有几种方法可以产生 RedirectResponse 的实例,最简单的方式就是透过辅助方法 redirect。当在测试时,建立一个模拟重定向响应的测试并不常见,所以使用辅助方法通常是可行的:

return redirect('user/login');

返回根据路由名称的重定向

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

return redirect()->route('login');
 
若你的路由有参数, 可以将其作为第二个引数传给 route 方法
// For a route with the following URI: profile/{id}

return redirect()->route('profile', [1]);
 
如果你要重定向到一个其ID参数是包含在一个Eloquent 模型中的路由, 你可以传递Model本身,其ID会自动抽出。
return redirect()->route('profile', [$user]);


返回根据控制器动作的重定向

既然可以产生 RedirectResponse 的实例并重定向至路由名称,同样的也可以重定向至控制器动作:

return redirect()->action('App\Http\Controllers\HomeController@index');

提示: 如果你已经通过 URL::setRootControllerNamespace 注册了根控制器的命名空间,那么就不需要对action() 方法内的控制器指定完整的命名空间。action() 方法内的控制器指定完整的命名空间。

action() 方法内的控制器指定完整的命名空间。

 

返回根据控制器动作的重定向,并给予参数赋值

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

返回根据控制器动作的重定向,并给予特定名称参数赋值

return redirect()->action('App\Http\Controllers\UserController@profile', ['user' => 1]);

返回重定向并且加上快闪数据( Flash Data )

通常重定向至新的 URL 时会一并将数据存进一次性 Session。所以为了方便,你可以利用方法连接的方式创建一个 RedirectResponse 的实例并将数据存进一次性 Session:

Route::post('user/profile', function () {
// Update the user's profile...

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

 


推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 深入解析HTTP网络请求API:从基础到进阶的全面指南
    本文全面解析了HTTP网络请求API,从基础到进阶,详细介绍了Android平台上的两种原生API——HttpUrlConnection和HttpClient。这两种API通过对底层Socket的封装,提供了高效、灵活的网络通信功能。文章不仅涵盖了基本的使用方法,还深入探讨了性能优化、错误处理和安全性等方面的高级主题,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • Java中处理NullPointerException:getStackTrace()方法详解与实例代码 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
author-avatar
刘刘刘刘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有