web-dev-qa-db-fra.com

variable globale en laravel

En PHP, je définissais certaines variables dans mon header.php et les utilisais dans toutes mes pages. Comment puis-je avoir quelque chose comme ça à Laravel?

Je ne parle pas de View::share('xx', 'xx' );

Supposons que je souhaite avoir une variable contenant un nombre et que j'ai besoin de ce nombre dans tous mes contrôleurs pour calculer quelque chose.

24
Frozen Smile

Cela semble être un bon candidat pour un fichier de configuration .

Créez-en un nouveau, appelons-le calculations.php:

Laravel ~ 4ish:

app
    config
        calculations.php

Laravel ~ 5ish:

config
    calculations.php

Ensuite, mettez des éléments dans le nouveau fichier de configuration:

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

Puis récupérez la configuration dans votre code quelque part (notez que le nom du fichier devient un "espace de noms" pour le paramètre config):

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

Définissez une propriété sur la BaseController, qui devrait être située dans votre répertoire controllers.

Vos contrôleurs doivent étendre la classe BaseController et ainsi hériter de ses propriétés.

6
Jacob

Vous pouvez utiliser Voir les compositeurs

Et au lieu d'utiliser la méthode de démarrage décrite dans la documentation, vous pouvez utiliser:

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

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

    });
}

Cela rendrait toutes les variables que vous déclarez avec 

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

à toutes les vues de votre application.

Voici un exemple complet de la façon dont j'ai utilisé cela dans l'un de mes projets.

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());
    }
}

Rappelez-vous simplement que, puisque vous avez déclaré un nouveau fournisseur de services, il doit être inclus dans le tableau 'providers' de config/app.php

0
Garret Blankenship