Laramen 一套让 Laravel 与 Lumen 在同一个项目中共存的解决方案

我当前的项目 (Eyewitness.io) 是用laravel做的前端服务, 调用的API是用Lumen框架构建。

每分钟有上百台被监控的服务器建立上千个连接,最开始的时候我就知道需要用Lumen 构建API。快速的响应时间,低消耗服务器资源。开销小,这个意义重大。
但是,如果你曾经在一个项目中使用过Laravel 和 Lumen,你可能习惯在两边复制代码,或者把相同的代码打包(像Eloquent Models命令行,业务逻辑等) ,为了在两边使用。

这样做使得项目更复杂了。

最近我有个想法或者说是一个希望,在一个应用中,我既想有Laravel的全部功能,又想有Lumen的速度,不建共享的包,也不复制代码,就是一个项目有两个好处,代码在一个地方,就可以做到这样的能力。

功能如何最大化取决于 Taylor 如何将 Laravel 和 Lumen 粘合在一起,为了实现这个,我有了一些灵感,以便于这两者可以很容易共存并且根本不需要相互独立。

Laramen 的想法横空出世。

Laramen 是一种理论,允许你在一个项目中融合 Laravel 和 Lumen。这个想法很简单 -- 任何类似 /api/* 这样的路由由 Lumen 驱动,其他的都交给 Laravel。

好处在哪里?简单 -- 所有代码都在一个地方。他们是相同的应用 -- 所以你应该像这样来处理。

这是一个动态展示:

file

你可以在这里体验上面的动态案例: https://laramen.xyz

Github地址: https://github.com/laurencei/laramen

以下功能运作良好:

  • 性能:这个解决方案其实并没有其它开销。 你的 /api/*路由只由Lumen驱动,其它就由Laravel,所以与单独使用任一解决方案相比,性能不变。
  • 测试:你可以明确的选择是使用Laravel还是Lumen去测试你的测试类,在Github代码中你可以看到这点是怎样处理的
  • 日志:你的 "Laravel" 日志输出在 "laravel.log",而如有任何关于API的错误日志则输出在"lumen.log",如果希望把他们错误日志都输出到同一个地方的话很容易实现,但我认为分开输出是比较有意义的。
  • 控制台:artisan命令还是由Laravel去控制,所以你可以使用全部的脚手架工具了。
  • 错误异常:Laravel应用使用 laravel.php 错误异常处理, 而你的API 就使用 api.php 错误异常处理,这可以让你分开处理web和API的异常。
  • 代码:你的所有代码都在同一个项目里,所有的模型,命令等等--它们都在同一个地方。

将要做的:

  • Config:我还没尝试过,但我认为我们可以用Lumen去使用 config:cache 的选项 (虽然现在还没实现),我认为这应该提升共存的兼容性,使得它没有任何性能损失。
  • Packages:我还没有试过这样会影响哪些包,特别是那些专门针对Laravel或者Lumen的包(但我认为这应该是可行的)。

请记住,这只是一个想法的证明,我还没有完全测试它,它还可能有一些问题我是没有考虑到的,一些代码可以很容易地被重构或以一种稍微不同的方式去完成。

但我希望这是一个很好的起步。

运行Laravel应用? Eyewitness.io 是专门为Laravel构建的监控和应用分析解决方案。它可以让你知道你的Laravel应用的性能。 监控运行时间、队列、计划任务、邮件、日志、安全性、SSL、DNS等等,而且它安装超级简单---只需要90秒就能安装完成并运行起来。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/@laurencei/lumen-vs-l...

译文地址:https://learnku.com/laravel/t/7897/laram...

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

自个儿翻译不好,就坐等大神喽

6年前 评论
Artisan

很期待这篇

6年前 评论

哦吼,没人翻译了

6年前 评论

@科大大 翻译很厉害,说个鸡蛋里面挑骨头的,建议看下 翻译规范

6年前 评论

@Kevinvinvin 看过了,有些全角的忘记转换了。。。

6年前 评论

实际用起来可能还是有点出入

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!