Dans Laravel 4, mon contrôleur utilise une disposition Blade:
class PagesController extends BaseController {
protected $layout = 'layouts.master';
}
La mise en page principale a produit 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 des variables qu'à 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 passera la $title
variable qu'à la section de contenu de la vue. Comment puis-je fournir cette variable à l'ensemble de la vue, ou à tout le moins à la mise en page principale?
@component('alert', ['foo' => 'bar'])
......Pour les futurs Google qui utilisent Laravel 5, vous pouvez désormais également l'utiliser avec des inclusions,
@include('views.otherView', ['variable' => 1])
la source
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.
la source
Dans le modèle de lame: définissez une variable comme celle-ci
@extends('app',['title' => 'Your Title Goes Here']) @section('content')
Et dans l'app.blade.php ou tout autre 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>
Ceci est ma première réponse ici. J'espère que ça marche Bonne chance!
la source
{{ $title ?? 'Default Title' }}
Le moyen le plus simple de résoudre:
view()->share('title', 'My Title Here');
Ou en utilisant View Facade:
use View; ... View::share('title', 'My Title Here');
la source
Il semble que je puisse transmettre des variables à l'ensemble de la mise en page en utilisant des attributs sur l'objet de mise en page, par exemple pour résoudre mon problème, j'ai pu faire ce qui suit:
$this->layout->title = 'Home page';
la source
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 de modèle de lame, N'OUBLIEZ PAS d'utiliser @ devant la variable.
... <title>{{ $title or '' }}</title> ... @yield('content') ...
la source
Tu peux essayer:
public function index() { return View::make('pages/index', array('title' => 'Home page')); }
la source
essayez simplement cette méthode simple: dans le contrôleur: -
public function index() { $data = array( 'title' => 'Home', 'otherData' => 'Data Here' ); return view('front.landing')->with($data); }
Et dans votre mise en page (app.blade.php):
<title>{{ $title }} - {{ config('app.name') }} </title>
C'est tout.
la source
si vous voulez obtenir les variables des sections, vous pouvez payer comme ceci:
$_view = new \View; $_sections = $_view->getFacadeRoot()->getSections(); dd($_sections); /* Out: array:1 [▼ "title" => "Painel" ] */
la source
$data['title'] = $this->layout->title = 'The Home Page'; $this->layout->content = View::make('home', $data);
Je l'ai fait jusqu'à présent parce que j'avais besoin à la fois de la vue et du fichier maître. Il semble que si vous n'utilisez pas $ this-> layout-> title, il ne sera pas disponible dans la mise en page principale. Les améliorations sont les bienvenues!
la source