开发者社区> 问答> 正文

聊聊 Laravel 5.5 的 「自动发现」

聊聊 Laravel 5.5 的 「自动发现」

展开
收起
社区秘书 2019-12-16 13:39:39 951 0
1 条回答
写回答
取消 提交回答
  • ThinkSNS是什么?

    ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+、ThinkSNS V4、ThinkSNS【简】。

    看了Taylor Otwell发表的Package Auto-Discovery In Laravel 5.5第一反应是”囧”

    为啥。。。

    也怪我,在开发之前忘记看5.5的开发代码动态,之前的文章中也提到过,在ThinkSNS+开发场景中,我们不可能让用户去 config/app.php 修改配置,所以为了解决加载包的问题,我们开发了Laravel服务提供者的增强版可以看plus/doc/pakcage

    是的,增强版的服务提供者,增加功能如下:

    l 可以友好的加载其他「服务提供者」(这在开发包的时候需要依赖其他laravel拓展包很有用)

    l 服务提供者转到composer.json配置(无需修改配置了)

    l 针对包更友好的publish(Laravel的vendor:publish要求输入服务提供者类,我们的只要求输入包名称)

    l 处理器,简化版的命令行,可以用一个函数写一个简单的处理方法。

    看到第二个就知道了,和laravel 5.5的自动发现类似,我们是在 bootstrap/cache/providers.php 中记录服务提供者信息,而Laravel 5.5是在vendor目录中查找后写入到 bootstrap/cache/package.php 。

    是的,我们的实现思路差不多,但我们支持更多功能。从这里读取服务提供者列表,然后在 Illuminate\Foundation\Application::registerConfiguredProviders 函数中合并服务提供者,然后加载,从服务提供者中还可以继续加载服务提供者。

    说下我的心情,开心,高兴,Laravel更易用了,另一个心情,惆怅,因为我在ThinkSNS+中开发了这一特性后,公司包几乎都是以这种方式实现的。

    你会说,把这些包配置字段设置下不就好了嘛?可是,在这种方式没定型之前,已经修改过一次,难道一个多月后又要修改一次?惨不忍睹呀!!!我怕我会被揍,想想就有点痛。

    今天在群里说这个话题,某开发者:“哈哈,我终于开发了画中画功能”,然后谷歌:“Android 8 原生支持”。其实道理一样的,并不是因为官方原生支持了不好,而是在纠结,用官方的?还是继续维护自己的?自己的不一定有官方好,官方支持更稳定。

    总结,我们觉得废弃掉现在的安装器(bootstrap/cache/providers.php 是由Composer安装器插件写入的),然后增加一份代码,从vendor目录匹配出来,写入到 bootstrap/cache/package.php 中去,只为5.5做准备。来吧!!!

    开源代码仓库

    GitHub:https://github.com/zhiyicx/thinksns-plus(点击star,每日关注开发动态。)

    往期研发日记传送门:

    《ThinkSNS+基于 Laravel master 分支【研发日记一】》

    《ThinkSNS+研发中前端的抉择(webpack/Vue)踩坑日记【研发日记二】》

    《基于 Laravel Route 的 ThinkSNS+ Component【研发日记三】》

    《如何做到 Laravel 配置可以网站后台配置【研发日记四】》

    《ThinkSNS+ 如何计算字符显示长度【研发日记五】》

    《基于 Laravel 的 ThinkSNS+ alpha.2 版本发布【研发日记六】》

    2019-12-16 13:39:55
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
基于webpack和npm的前端组件化实践 立即下载
函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务 立即下载