web-dev-qa-db-fra.com

Comment transmettre une variable à la mise en page à l'aide du modèle Laravel 'Blade?

Dans Laravel 4, mon contrôleur utilise une disposition de lame:

class PagesController extends BaseController {
    protected $layout = 'layouts.master';
}

La mise en page principale génère le titre de la variable, puis affiche une vue:

...
<title>{{ $title }}</title>
...
@yield('content')
....

Cependant, dans mon contrôleur, il semble que je ne puisse transmettre que des variables à la sous-vue, pas à la présentation. Par exemple, une action pourrait être:

public function index()
{
    $this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}

Cela ne fera que passer le $title variable dans la section de contenu de la vue. Comment est-ce que je peux fournir cette variable à la vue entière, ou au moins à la disposition principale?

66
Dwight

Si vous utilisez @extends dans votre contenu, vous pouvez utiliser ceci:

@extends('master', ['title' => $title])
178
s3v3n

Pour les futurs utilisateurs de Google qui utilisent Laravel 5, vous pouvez désormais l’utiliser également avec includes,

@include('views.otherView', ['variable' => 1])
34
Chilion

J'ai pu résoudre ce problème en ajoutant ceci à ma méthode de contrôleur:

    $title = 'My Title Here';
    View::share('title', $title);

$ this-> layout-> title = 'Page d'accueil'; n'a pas fonctionné non plus.

19
Mwirabua Tim

Dans le modèle de lame: définissez une variable comme celle-ci

@extends('app',['title' => 'Your Title Goes Here'])
@section('content')

Et dans le fichier app.blade.php ou un autre de votre choix (je ne fais que suivre la configuration par défaut Laravel 5)

<title>{{ $title or 'Default title Information if not set explicitly' }}</title>

Ceci est ma première réponse ici. J'espère que ça marche. Bonne chance!

11
Rohan Krishna

Le moyen le plus simple de résoudre:

view()->share('title', 'My Title Here');

Ou en utilisant vue façade:

use View;

...

View::share('title', 'My Title Here');
4
Efra

Il semble que je puisse transmettre des variables à l'ensemble de la présentation à l'aide d'attributs de l'objet de présentation. Par exemple, pour résoudre mon problème, j'ai pu effectuer les opérations suivantes:

$this->layout->title = 'Home page';
4
Dwight
class PagesController extends BaseController {
    protected $layout = 'layouts.master';

    public function index()
    {
        $this->layout->title = "Home page";
        $this->layout->content = View::make('pages/index');
    }
}

Dans le fichier Blade Template, N'OUBLIEZ PAS d'utiliser @ devant la variable.

...
<title>{{ $title or '' }}</title>
...
@yield('content')
...
2
Shiro

Tu peux essayer:

public function index()
{
    return View::make('pages/index', array('title' => 'Home page'));
}
0
Melvin