2
votes

Comment définir la variable globale dans Laravel?

J'essaie de définir une variable globale dans Laravel, j'ai défini la fonction __construct () mais je ne peux pas l'utiliser en dehors du contrôleur. Où dois-je définir cette variable?

public function __construct()
{
    $cat = Categories::get()->first();
}

mais je n'arrive pas à accéder à la variable $ cat dans certaines pages.


3 commentaires

Voulez-vous pouvoir accéder à $ cat à travers les vues?


Vous pouvez vérifier cette réponse: variable globale pour tous les contrôleurs et vues


Vous pouvez consulter les compositeurs de vues de Laravel pour partager des données sur toutes les vues. ( laravel.com/docs/master/views#view-composers )


3 Réponses :


3
votes

Si vous voulez accéder à la variable $ cat partout, c'est-à-dire dans tous les contrôleurs et vues, vous devez la partager comme ci-dessous:

Config::set(['user' => ['name' => 'John Doe']]);

Je suppose que vous utilisez Constructeur BaseController . Maintenant, si vos contrôleurs étendent ce BaseController , ils peuvent simplement accéder à la catégorie en utilisant $this->cat .

Deuxième méthode: strong>

Vous pouvez également essayer en utilisant la classe Config. Tout ce que vous avez à faire est d'ajouter le code suivant dans la méthode boot de app/Providers/AppServiceProvider.php

protected $cat;

public function __construct()
{
    $this->cat = Categories::get()->first();
    View::share('site_settings', $this->cat);
}

Puis n'importe où dans votre projet vous pouvez récupérer la valeur en utilisant Config::get('user.name');


0 commentaires

1
votes

Vous pouvez également utiliser la solution, qui est comme indiqué ci-dessous:

view('home', compact('cat'));

Maintenant, pour obtenir les données dans le contrôleur en utilisant la ligne ci-dessous;

$cat = app('cat');

et vous pouvez passer les données en vue en utilisant la ligne ci-dessous:

App::before(function($request) {
    App::singleton('cat', function(){
        return Categories::get()->first();
    });
});


0 commentaires

0
votes

Utilisez des fournisseurs de services

https: / /hdtuto.com/article/laravel-5-global-variable-in-all-views-file

app / Providers / AppServiceProvider.php p >

{{ $siteTitle }}

et à votre avis

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider

{

    /**

     * Bootstrap any application services.

     *

     * @return void

     */

    public function boot()

    {

        view()->share('siteTitle', 'HDTuto.com');



    }

    /**

     * Register any application services.

     *

     * @return void

     */

    public function register()

    {

        //

    }

}


0 commentaires