什么是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_V3.1-----------ThinkSNS开源微博系统,是智士的开源社交平台。采用PHP+MySQL技术平台,微博+应用的产品模式,同时拥有iphone、android客户端、wap、3G版界面。通过应用、插件、风格包..
开源社交系统ThinkSNS V4.2版本发布及其版本介绍
ThinkSNS(简称TS),是智士软件旗下的... ThinkSNS全方位提供网站开发|移动端APP定制|微信端软件研发|小程序|社群系统搭建|源代码|技术支持,是建立社交网站|企业社区论坛|微博平台|APP软件|系统集成|互联网创业首选.
thinksns开源sns、微博源码下载
一个功能强大,易于开发和动态扩展的社交系统。加上是PSR规范代码统一,并功能块松连接。您安装完成Plus并不意味着已经成功安装了所有功能,因为Plus使用预设的原则,所以您安装完成后拥有了所有可以被请求的REST...
2.游客模式登录用户能够在未登录状态下访问系统部分功能,涉及与“我”相关功能或需要操作处,系统自动弹出登陆框,强制用户登录 3.登录用户登录可使用手机号码进行直
thinksns社交系统,下载即可用,小白可用
thinksns是一个以php mysql进行开发的开源sns系统。 ThinkSNS基于许多优秀的开源软件开发,...ThinkSNS是国内最大的开源社群系统和移动社交引擎,以最专业化的社交类产品服务于企业和创业者,并致力于社交SNS在商业
ThinkSNS 开源社交系统 v4.6.1更新日志 【修复】聊天无法使用emoji问题 【修复】后台禁用用户后,app第三方登录可登录问题 【修复】部分接口问题 【修复】h5个人中心获取用户信息问题 【修复】后台设置积分问题 ...
基于PHP的ThinkSNS开源社交系统正式版源码.zip
ThinkSNS 是基于 Laravel 开发的一个用户生态基础框架系统,支持动态拓展应用的接入和UI规范设计。
PHP实例开发源码——ThinkSNS 开源社交系统正式版
内置的超级管理员 ... 安装方法 - 程序包放入服务器 - 导入数据库文件ts_2_0.sql 新增加的功能 - 新浪式的两栏页面 ...- 完善微博广场(全新的UI、新增名人堂功能、热门转发和热门话题可以屏蔽某些话题)
通过应用、插件、风格包等丰富的扩展机制可以后台关闭和开启各种功能。是建立社交网站、微博平台、移动互联网创业的首选。 ThinkSNS 3.1 版本更新重点内容:2013-11-08 1、增加全新的3G版、优化手机客户端 2、...
PHP实例开发源码—ThinkSNS 开源社交系统正式版.zip PHP实例开发源码—ThinkSNS 开源社交系统正式版.zip PHP实例开发源码—ThinkSNS 开源社交系统正式版.zip
基于PHP的ThinkSNS 开源社交系统正式版.zip
ThinkSNS1.6系统测试方案,里面介绍了主要的设计用例方法
PHP实例开发源码—ThinkSNS 开源社交系统正式版.zip
ThinkSNS基于许多优秀的开源软件开发,提供全方位的社交网络解决方案ThinkSNS源于办公圈项目,WEB端基于国内技术领先的ThinkPHP框架开发,另外还有IM客户端软件。 ThinkSNS全部基于开源项目,同时也作为开源项目,...
thinksns 资讯插件功能检查下后台资讯配置是否有绑定用户ID