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.
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
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.
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