配置文件
你的扩展包很有可能需要用户进行配置相关信息。
如果你要提供自定义的配置,在扩展包的根目录创建一个新的 config
目录,并在该目录下创建一个 config.php
文件,该文件将返回配置选项数组。
// 'config/config.php'
<?php
return [
'posts_table' => 'posts',
// other options...
];
合并配置文件
将配置文件注册到服务提供者的 register()
方法中,需要调用 $this->mergeConfigFrom
方法,第一个参数是 config.php
文件的完整目录,第二个参数是一个 key 值,可以通过 key 获的这个配置信息。
// 'BlogPackageServiceProvider.php'
public function register()
{
$this->mergeConfigFrom(__DIR__.'/../config/config.php', 'blogpackage');
}
「译者注」 上面的示例不够明确,当我们的扩展包需要配置信息时,一版都是在扩展包中定义配置文件的格式、默认值。具体的配置信息应该在 Laravel 项目跟目录下的
config
文件夹创建自定义的配置文件。通过mergeConfigFrom
方法后,用户自定义的配置信息就会覆盖扩展包默认的配置信息了。「译者注」 根据
ServiceProvider
文件的mergeConfigFrom
方法的代码,我们不难发现,mergeConfigFrom
方法的第二个参数就是config
目录下的配置文件名。protected function mergeConfigFrom($path, $key) { if (! $this->app->configurationIsCached()) { $this->app['config']->set($key, array_merge( require $path, $this->app['config']->get($key, []) )); } }
导出
为了允许用户修改默认的配置文件内容,我们需要提供导出配置的功能。可以在服务提供者的 boot()
方法中注册。因为改功能只能在命令行模式时才提供此功能,所以我们首先检查当前应用程序是否在命令行模式运行。我们将发布的配置文件设置为 config
标签。($this->publishes()
方法的第二个参数)
// 'BlogPackageServiceProvider.php'
public function boot()
{
if ($this->app->runningInConsole()) {
$this->publishes([
__DIR__.'/../config/config.php' => config_path('blogpackage.php'),
], 'config');
}
}
现在我们可以使用下面的命令来导出配置文件啦,执行此命令后,会自动在 Laravel 项目的 config
目录下创建一个 blogpackage.php
文件。
php artisan vendor:publish --provider="JohnDoe\BlogPackage\BlogPackageServiceProvider" --tag="config"
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: