Heim  >  Artikel  >  Backend-Entwicklung  >  Bei Verwendung der Hilfsmethode „config“ im Laravel-Entwicklungspaket tritt beim Ausführen von „vendor:publish“ ein Fehler auf

Bei Verwendung der Hilfsmethode „config“ im Laravel-Entwicklungspaket tritt beim Ausführen von „vendor:publish“ ein Fehler auf

WBOY
WBOYOriginal
2016-12-01 00:56:421310Durchsuche

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.

Antwortinhalt:

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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn