自己开发了一个package,其中使用provider来注册服务,但是里面有用到config()方法来获取配置,问题是这个config文件还没有被publish,感觉我的思路不对啊。
代码如下:
class SuperViewConfigProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // Publish the config file to $this->publishes([ __DIR__.'/../../config/config.php' => config_path('superview.php'), ]); } }
class SuperViewModelProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * Register any application services. * * @return void */ public function register() { // Get config, then bind automaticly $models = array_keys(config('superview.models')); foreach ($models as $model) { $this->app->singleton(config('superview.model_prefix') . $model, function($app) use ($models, $model) { return new $models[$model]; }); } } /** * Get the services provided by the provider. * * @return array */ public function provides() { return array_map(function($value) { return config('superview.model_prefix') . $value; }, array_keys(config('superview.models'))); } }
然后我运行: php artisan vendor:publish --provider="SuperViewProvidersSuperViewConfigProvider"
就会报错了说config内容不存在。
自己开发了一个package,其中使用provider来注册服务,但是里面有用到config()方法来获取配置,问题是这个config文件还没有被publish,感觉我的思路不对啊。
代码如下:
class SuperViewConfigProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // Publish the config file to $this->publishes([ __DIR__.'/../../config/config.php' => config_path('superview.php'), ]); } }
class SuperViewModelProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * Register any application services. * * @return void */ public function register() { // Get config, then bind automaticly $models = array_keys(config('superview.models')); foreach ($models as $model) { $this->app->singleton(config('superview.model_prefix') . $model, function($app) use ($models, $model) { return new $models[$model]; }); } } /** * Get the services provided by the provider. * * @return array */ public function provides() { return array_map(function($value) { return config('superview.model_prefix') . $value; }, array_keys(config('superview.models'))); } }
然后我运行: php artisan vendor:publish --provider="SuperViewProvidersSuperViewConfigProvider"
就会报错了说config内容不存在。
在 provider 的 register 方法里首先调用 mergeConfigFrom :
$this->mergeConfigFrom(__DIR__.'/../../config/config.php', 'superview');
意思是以你包里面的配置文件作为基础,然后合并用户app目录下的配置,最终得到你的 superview 的配置,并且设置在当前的Config存储中。
你都会写 ServiceProvider了 那难道不检查这个文件是否存在?
__DIR__.'/../../config/config.php
我不确定,在没发布config前,这里能否用到config
public function provides() { return array_map(function($value) { return config('superview.model_prefix') . $value; }, array_keys(config('superview.models'))); }
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号