Heim >Backend-Entwicklung >PHP-Tutorial >Bei Verwendung der Hilfsmethode „config' im Laravel-Entwicklungspaket tritt beim Ausführen von „vendor:publish' ein Fehler auf
Ich habe selbst ein Paket entwickelt, das Provider zum Registrieren von Diensten verwendet, aber die config()-Methode wird verwendet, um die Konfiguration zu erhalten. Das Problem ist, dass die Konfigurationsdatei meiner Meinung nach noch nicht veröffentlicht wurde.
Der Code lautet wie folgt:
<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>
Dann führe ich Folgendes aus: php artisan seller:publish --provider="SuperViewProvidersSuperViewConfigProvider"
Es wird eine Fehlermeldung gemeldet, die besagt, dass der Konfigurationsinhalt nicht vorhanden ist.
Ich habe selbst ein Paket entwickelt, das Provider zum Registrieren von Diensten verwendet, aber die config()-Methode wird verwendet, um die Konfiguration zu erhalten. Das Problem ist, dass die Konfigurationsdatei meiner Meinung nach noch nicht veröffentlicht wurde.
Der Code lautet wie folgt:
<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>
Dann führe ich Folgendes aus: php artisan seller:publish --provider="SuperViewProvidersSuperViewConfigProvider"
Es wird eine Fehlermeldung gemeldet, die besagt, dass der Konfigurationsinhalt nicht vorhanden ist.
Erster Aufruf register
in der mergeConfigFrom
-Methode des Anbieters:
<code class="php">$this->mergeConfigFrom(__DIR__.'/../../config/config.php', 'superview');</code>
Es bedeutet, dass Sie die Konfigurationsdatei in Ihrem Paket als Grundlage verwenden und dann die Konfiguration im Benutzer-App-Verzeichnis zusammenführen und schließlich die Konfiguration Ihrer Superview abrufen und im aktuellen Konfigurationsspeicher festlegen.
Sie können ServiceProvider
schreiben, warum also nicht prüfen, ob diese Datei existiert?
<code>__DIR__.'/../../config/config.php</code>
Ich bin mir nicht sicher, ob die Konfiguration hier verwendet werden kann, bevor die Konfiguration veröffentlicht wird
<code>public function provides() { return array_map(function($value) { return config('superview.model_prefix') . $value; }, array_keys(config('superview.models'))); }</code>