공급자를 사용하여 서비스를 등록하는 패키지를 직접 개발했지만 구성을 가져오는 데 config() 메서드가 사용되었습니다. 문제는 구성 파일이 아직 게시되지 않았다는 것입니다. 내 생각이 틀렸다고 생각합니다.
코드는 다음과 같습니다.
<code>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'), ]); } }</code>
<code>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'))); } }</code>
그런 다음 다음을 실행합니다: php artisan Vendor:publish --provider="SuperViewProvidersSuperViewConfigProvider"
구성 콘텐츠가 존재하지 않는다는 오류가 보고됩니다.
공급자를 사용하여 서비스를 등록하는 패키지를 직접 개발했지만 구성을 가져오는 데 config() 메서드가 사용되었습니다. 문제는 구성 파일이 아직 게시되지 않았다는 것입니다. 내 생각이 틀렸다고 생각합니다.
코드는 다음과 같습니다.
<code>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'), ]); } }</code>
<code>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'))); } }</code>
그런 다음 다음을 실행합니다: php artisan Vendor:publish --provider="SuperViewProvidersSuperViewConfigProvider"
구성 콘텐츠가 존재하지 않는다는 오류가 보고됩니다.
공급자의 register
메소드에서 mergeConfigFrom
을 먼저 호출합니다.
<code class="php">$this->mergeConfigFrom(__DIR__.'/../../config/config.php', 'superview');</code>
패키지의 구성 파일을 기본으로 사용한 다음 사용자 앱 디렉터리의 구성을 병합하고 마지막으로 슈퍼뷰의 구성을 가져와 현재 구성 저장소에 설정한다는 의미입니다.
ServiceProvider
라고 써도 되지만, 이 파일이 있는지 확인해보시면 어떨까요?
<code>__DIR__.'/../../config/config.php</code>
config가 출시되기 전에 여기서 config를 사용할 수 있는지 잘 모르겠습니다
<code>public function provides() { return array_map(function($value) { return config('superview.model_prefix') . $value; }, array_keys(config('superview.models'))); }</code>