如何做到 Laravel 配置可以网站后台配置【社交系统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 镜像配置合并。

开源版源码官方正版获取唯一渠道:关注公众号“thinksns”,回复“开源版”即可获得最新源码压缩文件地址。

开源代码仓库:

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

官网:http://www.thinksns.com/

开源不易,为了争取开源,我们团队做了很多努力。把基于Laravel的作品展示在大家面前,之后专栏会持续不断的分享ThinkSNS +开发过程中的技术细节。

能看见这里的,一定是真爱~谢谢你们的爱

时间: 2024-10-06 15:00:28

如何做到 Laravel 配置可以网站后台配置【社交系统ThinkSNS+研发日记四】的相关文章

【社交系统ThinkSNS+研发日记三】基于 Laravel Route 的 ThinkSNS+ Component

[社交系统ThinkSNS+研发日记系列] 一.<ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1> 二.<基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记> 在前面,我介绍了拓展类型,分别有 plus-compnent 和 plus-plugin 两个,这里重点讲以下如何实现 plus-component 的. plus-component 是什么 就如同名字一样,plus 代表的是 Thin

社交系统ThinkSNS+在研发过程中,如何做到 Laravel 配置可以网站后台配置

什么是ThinkSNS+ ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案. 本文分享下利用 Laravel 的 Bootstrapping 达到网站后台设置 laravel 配置. 需求场景 首先,ThinkSNS+ 作为一个用户可以使用的「社交系统」和开源网站程序一样拥有后台,有一些配置,Laravel 是要求写在 /config/*.php 的配置文件中的,例如 app.name.app.debug 等信息的配置,以及 Jo

Laravel入门及实践,快速上手社交系统ThinkSNS+二次开发

[摘要]自从社交系统ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门. 温馨提示: l 本文纯干货,文字和代码居多,且适合零基础Laravel学习者: l 本文会新建一个名为 blog 的 Laravel 程序,这是一个非常简单的博客. 本文主要内容: · 新建 Laravel 程序,如何连接数据库: · Laravel 程序的基本文件结构: · MVC(模

PrestaShop 网站后台配置(八)

转载请注明出处:http://www.cnblogs.com/zhong-dev/p/4943043.html 网店版本 Prestashop v1.6 使用 谷歌的 site:www.millechic.com 方式查询网站,结果中有这样的描述: 红框中显示店铺程序,如果想修改,则找到 Themes - 使用的主题 - header.tpl 文件,进行修改.要注意的是: 这里应该有一个语法规则吧,如果我是这样写的: {$meta_title All Rights Reserved | esca

PrestaShop 网站后台配置(七)

转载请注明出处:http://www.cnblogs.com/zhong-dev/p/4943037.html 网店版本 Prestashop v1.6 前台联系店家如下图: 发送邮件的地址设置方式为:后台-CUSTOMERS-Contacts里面进行设置,如下图:

PrestaShop 网站后台配置(五)

转载请注明出处:http://www.cnblogs.com/zhong-dev/p/4943012.html 网店版本 Prestashop v1.6 关于后台产品上传增加商品属性 同一个产品可能会有不同的属性,如价格.尺寸之类的,Prestashop后台可以做到一次性生成多个组合(根据所设置的产品属性),具体操作如下(英文版本,其余语言可以找到对应位置): 1.CATALOG - Products - Edit,如下图 2.找到 Combinations 栏,如下图 可以看到上图中有一个 P

PrestaShop 网站后台配置(四)

转载请注明出处:http://www.cnblogs.com/zhong-dev/p/4942979.html 网店版本 Prestashop v1.6 关于 CMS 模块 左右区域对应于前台进入到某个分栏后,页面的左右部分,可用于页面的快速跳转 欢迎访问我的店铺:http://www.millechic.com

10套精美的免费网站后台管理系统模板

10套精美的免费网站后台管理系统模板下载 大部分的 Web 应用和动态网站都需要一个后台管理系统用于管理前台界面的信息展示以及用户信息.管理后台的设计虽然不像前台界面那样要求设计精美,但是也需要有清晰的管理模块划分,这样使用后台管理系统的人员才能够方便的进行操作和管理.下面收集了十款非常漂亮的网站后台管理系统模板分享给大家,欢迎免费下载使用. Admin Panel Template 这个后台管理模板的导航设计非常漂亮,头部还有未读的短消息和提醒的条数显示. 在线演示    PSD下载    H

《特别推荐》10套精美的免费网站后台管理系统模板(转载)

大部分的 Web 应用和动态网站都需要一个后台管理系统用于管理前台界面的信息展示以及用户信息.管理后台的设计虽然不像前台界面那样要求设计精美,但是也需要有清晰的管理模块划分,这样使用后台管理系统的人员才能够方便的进行操作和管理.下面收集了十款非常漂亮的网站后台管理系统模板分享给大家,欢迎免费下载使用. 您可能还喜欢 34个漂亮的应用程序后台管理界面设计(一) 分享最新35套非常精美的 PSD 图标素材 34个漂亮的应用程序后台管理界面设计(二) 分享42个新鲜出炉的精美的免费 PSD 素材 34