No Laravel 4, meu controlador usa um layout Blade:
class PagesController extends BaseController {
protected $layout = 'layouts.master';
}
O layout mestre produz o título da variável e, em seguida, exibe uma visualização:
...
<title>{{ $title }}</title>
...
@yield('content')
....
No entanto, em meu controlador, só consigo passar variáveis para a subvisualização, não para o layout. Por exemplo, uma ação pode ser:
public function index()
{
$this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}
Isso apenas passará a $title
variável para a seção de conteúdo da visualização. Como posso fornecer essa variável para toda a visualização, ou pelo menos o layout mestre?
@component('alert', ['foo' => 'bar'])
...Para futuros Google's que usam o Laravel 5, agora você também pode usá-lo com inclusões,
@include('views.otherView', ['variable' => 1])
fonte
Consegui resolver esse problema adicionando isto ao meu método de controlador:
$title = 'My Title Here'; View::share('title', $title);
$ this-> layout-> title = 'Página inicial'; também não funcionou.
fonte
No modelo Blade: defina uma variável como esta
@extends('app',['title' => 'Your Title Goes Here']) @section('content')
E no app.blade.php ou qualquer outro de sua escolha (estou apenas seguindo a configuração padrão do Laravel 5)
<title>{{ $title or 'Default title Information if not set explicitly' }}</title>
Esta é minha primeira resposta aqui. Espero que funcione. Boa sorte!
fonte
{{ $title ?? 'Default Title' }}
Maneira mais simples de resolver:
view()->share('title', 'My Title Here');
Ou usando view Facade:
use View; ... View::share('title', 'My Title Here');
fonte
Parece que posso passar variáveis para todo o layout usando atributos no objeto de layout, por exemplo, para resolver meu problema, fui capaz de fazer o seguinte:
$this->layout->title = 'Home page';
fonte
class PagesController extends BaseController { protected $layout = 'layouts.master'; public function index() { $this->layout->title = "Home page"; $this->layout->content = View::make('pages/index'); } }
No arquivo de modelo do Blade, LEMBRE-SE de usar @ na frente da variável.
... <title>{{ $title or '' }}</title> ... @yield('content') ...
fonte
se você deseja obter as variáveis das seções, pode pagar assim:
$_view = new \View; $_sections = $_view->getFacadeRoot()->getSections(); dd($_sections); /* Out: array:1 [▼ "title" => "Painel" ] */
fonte
Podes tentar:
public function index() { return View::make('pages/index', array('title' => 'Home page')); }
fonte
tente este método simples: no controlador: -
public function index() { $data = array( 'title' => 'Home', 'otherData' => 'Data Here' ); return view('front.landing')->with($data); }
E em seu layout (app.blade.php):
<title>{{ $title }} - {{ config('app.name') }} </title>
Isso é tudo.
fonte
$data['title'] = $this->layout->title = 'The Home Page'; $this->layout->content = View::make('home', $data);
Eu fiz isso até agora porque precisava da visualização e do arquivo mestre. Parece que se você não usar $ this-> layout-> title, ele não estará disponível no layout mestre. Melhorias bem-vindas!
fonte