variable globale dans laravel

en PHP, j'avais l'habitude de définir quelques variables dans mon header.php et de les utiliser dans toutes mes pages. Comment puis-je avoir quelque chose comme ça à Laravel?

je ne parle pas d' View::share('xx', 'xx' );

supposons que je veux avoir une variable qui contient un nombre et j'ai besoin de ce nombre dans tous mes controllers pour calculer quelque chose.

24
demandé sur Mike Chamberlain 2013-11-06 13:49:01

3 réponses

Sonne comme un bon candidat pour un fichier de configuration.

Créer un nouveau, nous allons l'appeler calculations.php:

Laravel ~4ish:

app
    config
        calculations.php

Laravel ~5ish:

config
    calculations.php

Puis mettre des trucs 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" namespace " de toutes sortes pour l'élément de configuration):

echo Config::get('calculations.some_key'); // 42 in Laravel ~4
echo config('calculations.some_key'); // 42 in Laravel ~5
68
répondu fideloper 2018-09-06 18:57:30

Définir une propriété sur l' BaseController, qui devrait être situé dans votre controllers répertoire.

vos controllers devraient étendre le BaseController de la classe et ainsi hériter de ses propriétés.

6
répondu Jacob 2013-11-06 09:57:29

Vous pouvez utiliser Voir Les Compositeurs

et au lieu d'utiliser la méthode boot décrite dans les docs vous pouvez utiliser:

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

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

    });
}

qui rendraient toutes les variables que vous déclarez avec

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

pour toutes les vues de votre application.

Voici un exemple complet de la façon dont je l'utilise dans un de mes projet.

app/Fournisseurs/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 Juste que, parce que vous avez déclaré un nouveau fournisseur de services, il doit être inclus dans le 'fournisseurs', array config / app.php

0
répondu Garret Blankenship 2015-06-23 03:12:05