117 votes

Comment passer une variable au layout en utilisant le templating Blade de Laravel ?

Dans Laravel 4, mon contrôleur utilise une mise en page Blade :

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

La mise en page principale édite le titre de la variable et affiche ensuite une vue :

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

Toutefois, dans mon contrôleur, il semble que je ne puisse transmettre des variables qu'à la vue secondaire, et non à la mise en page. Par exemple, une action pourrait être :

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

Cela ne transmettra que le $title à la section du contenu de la vue. Comment puis-je fournir cette variable à l'ensemble de la vue, ou au moins à la disposition principale ?

262voto

s3v3n Points 2043

Si vous utilisez @extends dans votre mise en page de contenu, vous pouvez utiliser ceci :

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

Note que la même chose que ci-dessus fonctionne avec les enfants, comme :

@include('views.subView', ['my_variable' => 'my-value'])

Utilisation

Ensuite, là où la variable est passée, utilisez-la comme :

<title>{{ $title ?? 'Default Title' }}</title>

51voto

Chilion Points 311

Pour les futurs Google'rs qui utilisent Laravel 5, vous pouvez désormais l'utiliser également avec des includes,

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

23voto

Rohan Krishna Points 417

Dans le modèle de lame : définir une variable comme ceci

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

Et dans le fichier app.blade.php ou tout autre fichier de votre choix (je suis juste la configuration par défaut de Laravel 5)

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

C'est ma première réponse ici. J'espère qu'elle fonctionnera. Bonne chance !

20voto

TechyTimo Points 727

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

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

$this->layout->title = 'Home page' ; ne fonctionne pas non plus.

6voto

Efra Points 121

La façon la plus simple de résoudre le problème :

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

Ou en utilisant la vue Facade :

use View;

...

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X