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

WBOY
Freigeben: 2023-03-02 06:00:02
Original
1347 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren
<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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
<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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage