什么是ThinkSNS+

  ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+、ThinkSNS V4、ThinkSNS【简】。
距离上一次分享差不多一周了,本文分享下利用 Laravel 的 Bootstrapping 达到网站后台设置 laravel 配置。

需求场景

首先,ThinkSNS+ 作为一个用户可以使用的「社交系统」和开源网站程序一样拥有后台,有一些配置,Laravel 是要求写在 /config/*.php 的配置文件中的,例如 app.name、app.debug 等信息的配置,以及 Jobs 的驱动配置,广播系统的配置等,我们都搬到了网站后台,用户安装后可以不用修改配置文件的情况下镜像配置。
如何覆盖配置
我们首先打开 Illuminate\Foundation\Application::bootstrapWith 方法,代码如下:
重点代码在 $this['events']->fire('bootstrapping: '.$bootstrapper, [$this]); 和 $this['events']->fire('bootstrapped: '.$bootstrapper, [$this]); 上,很明显是加载并运行 bootstrapper 的前置和后置事件。
所以,我们看还有一个方法叫做 beforeBootstrapping 和 afterBootstrapping 然后怎么做呢?我们看
没错,这里是固定了顺序的,我错误的加载顺序,会造成laravel的失败,所以,我们选择在之前继承 Illuminate\Foundation\Application 的应用基础上增加一个事件,代码如下:
哪里添加的事件
因为 ThinkSNS+ 是继承了 Illuminate\Foundation\Application 实现了新的 Application 类,所以我们直接在构造方法里面增加了代码。
这样,当 Laravel 启动,但是还没有加载 bootstrapper 的时候,已经把 加载配置的后置事件注入进去了。当加载配置执行完成后就会执行我注入的后置事件。

后置事件的实现

我们在创建了 \Zhiyi\Plus\Bootstrap\LoadConfiguration 这样一个类,注册为后置事件,路径为: /app/Bootstrap/LoadConfiguration.php ,然后实现代码如下:
很简单,因为 app('config') 是一个 Illuminate\Contracts\Config\Repository 接口的实例,所以直接调用 set 方法进行配置覆盖。
而 Zhiyi\Plus\Support\Configuration 类是封装的自定义配置加载类,加载的配置文件存放在一个 YAML 文件中,这个类实现了 自定义配置文件的加载和保存。这样,我们从后台调用 API 然后 constroller 调用这个类的 save 方法进行持久化。

Zhiyi\Plus\Support\Configuration::getConfigurationBase

为什么要特殊说一下这个方法?因为这个方法的特殊性,也是 depth merge 实现的重要函数,在 Repository 中支持 app.name = value 这样的形式进行深曾键值赋值,利用这一个特性,这个函数将 多维数组转换为一维。
效果:
然后调用 app('config')->set($arr) 就对 Laravel 的 config 进行了 depth merge。
最后,持久化保存的 YAML 内容如下:
所以,基于 depth merge 在 .plus.yml 配置中,只需要保存部分配置,即可不想配置结构的完整性的情况下对 Laravel 镜像配置合并。

开源代码仓库:

GitHub:https://github.com/zhiyicx/thinksns-plus(点击star,每日关注开发动态。)
开源不易,为了争取开源,我们团队做了很多努力。把基于Laravel的作品展示在大家面前,之后专栏会持续不断的分享ThinkSNS +开发过程中的技术细节。
能看见这里的,一定是真爱~谢谢你们的爱❤❤❤❤❤
这里是传送门:
《ThinkSNS+基于 Laravel master 分支【研发日记一】》
《ThinkSNS+研发中前端的抉择(webpack/Vue)踩坑日记【研发日记二】》
《基于 Laravel Route 的 ThinkSNS+ Component【研发日记三】》

ThinkSNS+在研发过程中,如何做到 Laravel 配置可以网站后台...相关推荐

  1. 在敏捷研发过程中,Scrum Master角色的哪些事

    目录 概述 Scrum Master何人担当? 适合作为Scrum Master的人员 不适合作为Scrum Master的人员 Scrum Master主要职责 Scrum Master技能要求 硬 ...

  2. doe报告模板_技术漫谈|关于制剂研发过程中的实验设计(DOE)误区讨论

    技术漫谈 第01期 关于制剂研发过程中的实验设计(DOE)误区讨论 // 作者:合全药业制剂业务后期项目部 感谢合全药业制剂研发后期团队朱莹.夏彬等同事对本稿件的支持 早在2004-2005年,FDA ...

  3. 一幅漫画揭示了项目研发过程中存在的问题,太形象了

    秋千制作过程的漫画最早出现在20世纪70年代.后来,秋千漫画出现了许多变种,如用来比喻软件开发过程和管理的漫画.秋千漫画描述了在实际制作秋千这个需求过程中,各个部门之间的理解配合及完成需求的差异. 2 ...

  4. 关于研发过程中测试工作的一些思考

    目录 一.背景&目标 二.需求设计阶段测试--测试计划与需求评估 三.开发设计阶段测试--分析与设计 四.测试阶段--测试执行与策略实施 五.发布前后阶段 一.背景&目标 测试工作是保 ...

  5. 以有限应对无限-互联网产品研发过程中的 5 种等级

    一个互联网产品的生命周期大概可以分为需求阶段,研发阶段,运营阶段. 在需求阶段,通常我们会有需求优先级: 在研发阶段,会有转测 BUG 等级,BUG 的严重程度: 在运营阶段,会有线上 BUG 等级, ...

  6. 软件项目研发过程中阶段划分和工作方法

    一.产品立项阶段 主要工作:市场调研.竞品分析.可行性分析,确定产品定位,预估项目成本,规划产品发展目标和前景,同时提示和预警风险,以及对应的预案和措施. 工作目的:解决是否可以做,是否值得做,是否有 ...

  7. 新产品研发过程中的重要问题

    1.如何平衡市场竞争的压力和客户多变的需求,快速将产品推向市场: 2.如何建立一个真正的"以客户为中心.以市场为导向"的研发组织体系,快速响应市场需求: 3.产品开发的过程中研发如 ...

  8. nginx配置反向代理过程中遇到的坑 配置好之后报404问题

    项目场景: nginx配置反向代理路径 问题描述 在配置nginx反向代理的过程中,路径可以匹配上但是一直报404,找不到路径.nginx配置如下: location /business {add_h ...

  9. 梳理研发过程中的各种端到端流程

    深入到研发项目的各个环节->将现有的执行的较好的过程进行提炼->形成流程图和相关流程文件 比较同类型的过程形成的不同流程->确认关键节点->优化流程图->将流程碎片组合成 ...

最新文章

  1. 转:TestLink1.9.3测试用例:Excel转换XML工具二实现代码
  2. 记录从数据库把数据初始化mongodb缓存的一些坑
  3. STM32F405的 ADC参考电压选择问题
  4. 2656: [Zjoi2012]数列(sequence)(递归+高精度)
  5. java8 大到小排序,屌炸天,JDK8的排序大法!!
  6. Struts文件下载
  7. 这份1307页Android面试全套真题解析,源码+原理+手写框架
  8. 如何在React中从其父组件更改子组件的状态
  9. 前端学习(582):实现观看和调试dom节点
  10. [转载] 财经郎眼20120423:长点心吧“两桶油”!
  11. 如何计算机操作维护培训,电脑基本操作培训教材.ppt
  12. Vrep线程之间的切换
  13. pyqt5 发送键盘信号_Python教程 | Pyqt5实战教程之操作交互处理,原来这么简单!...
  14. memcached部署安装文档
  15. 采用nettcp绑定的wcf宿主到iis7
  16. IE开发人员工具不见了?
  17. linux命令测网速
  18. DataV可视化大屏-基本操作说明
  19. 血手耳机与笔记本驱动冲突
  20. css3简单实现页面中出现雪花飘落效果

热门文章

  1. 如何投影一个纹理 (翻译:心蓝 潘李亮)
  2. AI文娱独角兽Video++极链科技完成C1轮,5个月融资10.7亿元
  3. idea生成__jb_old__文件无法删除
  4. MQ常见问题及解决方案
  5. 联想与戴尔台式计算机比较,戴尔台式机和联想台式机哪个好用
  6. java中break和continue的用法
  7. VS2008+VP5开发环境配置
  8. Axure交互模拟线框图等等
  9. mouse without borders 两台主机共用一套鼠标键盘
  10. SDNU 1543.Happy Salted Fish Every Day