本文分享使用Laravel的Bootstrapping实现网站后台laravel配置。需求场景首先,ThinkSNS+作为一个用户可以使用的“社交系统”,与开源网站程序有着相同的背景。在/config/*.php的配置文件中有一些Laravel需要写入的配置,比如app.name,app.debug等信息的配置,还有Jobs的driver配置,Jobs的配置广播系统等全部移至网站后台。安装后,用户无需修改配置文件即可进行镜像配置。如何覆盖配置我们首先打开IlluminateFoundationApplication::bootstrapWith方法,代码如下:关键代码是$this['events']->fire('bootstrapping:'.$bootstrapper,[$this]);和$this['events']->fire('bootstrapped:'.$bootstrapper,[$this]);,显然是加载和运行引导程序的前后事件。那么,让我们看看还有另一种方法叫做beforeBootstrapping和afterBootstrapping以及如何做?我们是对的,这里的顺序是固定的,我错误的加载顺序会导致laravel失败,所以我们选择在之前继承IlluminateFoundationApplication的应用的基础上添加一个事件,代码如下:在哪里添加事件因为ThinkSNS+是新的Application类,是继承自IlluminateFoundationApplication实现的,所以我们直接在构造方法中添加代码。这样,当Laravel启动时,但尚未加载引导程序时,加载配置的后事件将被注入其中。当加载配置执行的时候,我注入的post-event就会被执行。post-event的实现我们创建了一个类似ZhiyiPlusBootstrapLoadConfiguration的类,注册为post-event,路径为:/app/Bootstrap/LoadConfiguration.php,然后实现代码如下:很简单,因为app('config')是一个IlluminateContractsConfigRepository接口的实例,所以直接调用set方法覆盖配置。ZhiyiPlusSupportConfiguration类是一个封装的自定义配置加载类。加载的配置文件存储在YAML文件中。该类实现了自定义配置文件的加载和保存。这样我们就在后台调用API,然后controller调用这个类的save方法进行持久化。ZhiyiPlusSupportConfiguration::getConfigurationBase为什么要特别讲这个方法呢?由于该方法的特殊性,它也是深度合并实现的一个重要功能。在Repository中,深度键值赋值支持app.name=value的形式。使用此功能,此函数将多维数组转换为一维数组。作用:然后调用app('config')->set($arr)对Laravel的config进行深度合并。最后持久化保存的YAML内容如下:因此,基于.plus.yml配置中的深度合并,只需要保存部分配置,无需配置完整性即可合并Laravel镜像配置结构。开源代码仓库GitHub:https://github.com/zhiyicx/th...(点击star,每天关注发展动态。)ThinkSNS官网:http://www.thinksns.com/内测申请方法 提供个人/企业联系方式及证明信息(实名身份证/企业营业执照照片或扫描件)及申请说明,发送邮件至lihecong@zhishisoft.com即有机会获得首批的内部测试资格。名额有限,请尽快申请。 参与内测,请提供以下信息 1个可接收验证码的手机号码;1个指定电邮地址;1测试者姓名;1个你喜欢的账号昵称,我们的团队付出了很多努力。将基于Laravel的作品展示在大家面前,接下来专栏会继续分享ThinkSNS+开发过程的技术细节。
