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?
Si vous utilisez @extends
dans votre contenu, vous pouvez utiliser ceci:
@extends('master', ['title' => $title])
Pour les futurs utilisateurs de Google qui utilisent Laravel 5, vous pouvez désormais l’utiliser également avec includes,
@include('views.otherView', ['variable' => 1])
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.
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!
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');
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';
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')
...
Tu peux essayer:
public function index()
{
return View::make('pages/index', array('title' => 'Home page'));
}