>  기사  >  백엔드 개발  >  laravel后台可修改配置自动加载

laravel后台可修改配置自动加载

WBOY
WBOY원래의
2016-06-20 12:33:21886검색

1、laravel实现的生产环境跟开发环境配置分离

通常我们会把配置文件所需要的参数放在/config下面的目录中,这个文件夹下面的所有文件都会自动加载,我们使用config(文件名+”.”+配置项)的方式进行访问,但是直接修改config下面文件的配置会很麻烦,例如我们生产环境跟开发环境不同,这就比较麻烦了,可laravel很便捷的给我们解决了这个方法,我们开发环境在根目录配置.env文件,config里面的配置都通过读取.env的方式来实现配置的自由切换,好了,我们完成了一个比较方便的事情

2、如何实现一些比较固定参数的后台配置

我们日常开发系统一些不是经常会变的东西,比方说网站设置,邮箱配置,第三方登录配置。这些配置我们希望通过后台修改后我们的程序能够像读配置文件一样来读,省去了我们每初始化一套系统都得手动去修改参数配置(假设我们系统是一套一套的卖给他人的)。

这个时候中间件用上了,我们可以建立一个中间件,例如app/Http/Middleware/ResetConfig.php,然后把这个中间件放到app/Http/Kernel.php中的protected $middleware数组里面,我们就可以实现写入的配置文件读取到config中

ResetConfig.php

public function handle($request, Closure $next){    $json_datas = $arr_datas = null;    // email    $file_path = storage_path('app/email.data');    if(file_exists($file_path)) {        $json_datas = file_get_contents($file_path);        $json_datas && $arr_datas = json_decode($json_datas, true);        $arr_datas && config(['mail' => array_merge(config('mail'), $arr_datas)]);    }    $json_datas = $arr_datas = null;    // msg    $file_path = storage_path('app/msg.data');    if(file_exists($file_path)) {        $json_datas = file_get_contents($file_path);        $json_datas && $arr_datas = json_decode($json_datas, true);        $arr_datas && config(['msg' => $arr_datas]);    }    return $next($request);}

Kernel.php

protected $middleware = [    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,    \App\Http\Middleware\ResetConfig::class,    \App\Http\Middleware\Cors::class, //解决跨域];

这样我们在开发程序的时候只用把文件写入到app/email.data中就可以实现了,我们的其他程序通过config方法就可以及时访问到我们修改的配置了。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.