我们在写扩展包的时候,总是会纠结,里面的一些个性化的配置要怎么处理呢。
laravel 很好的解决了这个问题。
laravel 的 ServiceProvider很好的解决了这个问题。
具体来说,如果,你想要在外部配置你的扩展包,那么,就先要把你这个 包注册成 服务。
首先需要定义一个类 继承 ServiceProvider.
1.里面定义一个register函数 指定 包所用的配置文件的绝对路径,然后把配置的外部文件和内部文件的内容合并。
2.在boot函数中,指定 publish的具体位置。
代码如下
<?php/** * Created by Bane.Shi. * Copyright MoenSun * User: Bane.Shi * Date: 16/4/30 * Time: 00:06 */namespace MoenSun\MSFileSystem;use Illuminate\Support\ServiceProvider;class MSFileSystemServiceProvider extends ServiceProvider{ public function register() { $configPath = __DIR__ . '/../../../config/mslaravelsystem.php'; $this->mergeConfigFrom($configPath,"mslaravelsystem"); } public function boot(){ $app = $this->app; $configPath = __DIR__ . '/../../../config/mslaravelsystem.php'; $this->publishes([$configPath => $this->getConfigPath()],'config'); } public function getConfigPath(){ return config_path("mslaravelsystem.php"); } protected function publishConfig($configPath) { $this->publishes([$configPath => config_path('mslaravelsystem.php')], 'config'); }}
在 config/app.php 文件夹下,添加该服务
在 providers 数组下添加
MoenSun\MSFileSystem\MSFileSystemServiceProvider::class
再执行
php artisan vendor:publish
这样文件就会copy 到config文件夹下了。