webentwicklung-frage-antwort-db.com.de

globale Variable in Laravel

In PHP habe ich einige Variablen in meinem header.php definiert und in allen meinen Seiten verwendet. Wie kann ich so etwas in Laravel haben?

Ich spreche nicht von View::share('xx', 'xx' );

Angenommen, ich möchte eine Variable haben, die eine Zahl enthält, und ich brauche diese Zahl in allen Controllern, um etwas zu berechnen.

24
Frozen Smile

Klingt nach einem guten Kandidaten für eine Konfigurationsdatei .

Erstellen Sie eine neue, nennen wir sie calculations.php:

Laravel ~ 4ish:

app
    config
        calculations.php

Laravel ~ 5ish:

config
    calculations.php

Dann füge Zeug in die neue Konfigurationsdatei ein:

<?php return [ 'some_key' => 42 ];

Rufen Sie dann die Konfiguration irgendwo in Ihrem Code ab (beachten Sie, dass der Dateiname zu einem "Namespace" für das Element config wird):

echo Config::get('calculations.some_key'); // 42 in Laravel ~4
echo config('calculations.some_key'); // 42 in Laravel ~5
68
fideloper

Legen Sie eine Eigenschaft für die Variable BaseController fest, die sich in Ihrem Verzeichnis controllers befinden sollte.

Ihre Controller sollten die BaseController-Klasse erweitern und somit ihre Eigenschaften erben.

6
Jacob

Sie könnten View Composers verwenden

Anstelle der in den Dokumenten beschriebenen Startmethode können Sie auch Folgendes verwenden:

public function boot()
{
    // Using class based composers...
    view()->composer(
        '*', 'App\Http\ViewComposers\ProfileComposer'
    );

    // Using Closure based composers...
    view()->composer('*', function ($view) {

    });
}

Das würde alle Variablen wiedergeben, mit denen Sie deklarieren 

$view->with('yourVariableName', 'yourVariableValue');

zu allen Ansichten in Ihrer App.

Hier ist ein vollständiges Beispiel, wie ich dies in einem meiner Projekte verwendet habe.

app/Providers/ComposerServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
     /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        view()->composer(
            '*', 'App\Http\ViewComposers\UserComposer'
        );
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

app/Http/ViewComposers/UserComposer.php

<?php

namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;
use Illuminate\Contracts\Auth\Guard;

class UserComposer
{

    protected $auth;

    public function __construct(Guard $auth)
    {
        // Dependencies automatically resolved by service container...
        $this->auth = $auth;
    }

    public function compose(View $view)
    {
        $view->with('loggedInUser', $this->auth->user());
    }
}

Denken Sie daran, dass Sie, da Sie einen neuen Service Provider deklariert haben, in das Array 'provider' in config/app.php aufgenommen werden müssen.

0