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