Как передать переменную в макет с помощью шаблона Laravel ' Blade?
в Laravel 4 Мой контроллер использует макет лезвия:
class PagesController extends BaseController {
protected $layout = 'layouts.master';
}
главный макет выводит заголовок переменной, а затем отображает представление:
...
<title>{{ $title }}</title>
...
@yield('content')
....
однако в моем контроллере я могу передавать переменные только в подвиде, а не в макете. Например, действие может быть:
public function index()
{
$this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}
это будет только передать $title
переменная в разделе содержимого представления. Как я могу предоставить эту переменную для всего представления, или в самом хотя бы мастер-макет?
9 ответов:
Если вы используете
@extends
в свой макет вы можете использовать это:@extends('master', ['title' => $title])
для будущих Google'rs, которые используют Laravel 5, Теперь вы можете также использовать его с включает,
@include('views.otherView', ['variable' => 1])
я смог решить эту проблему, добавив это в мой метод контроллера:
$title = 'My Title Here'; View::share('title', $title);
$this - > layout - >title = 'Домашняя страница'; тоже не работает.
в шаблоне Блейда: определите такую переменную
@extends('app',['title' => 'Your Title Goes Here']) @section('content')
и в приложении.лезвие.php или любой другой по вашему выбору (я просто следую настройке Laravel 5 по умолчанию )
<title>{{ $title or 'Default title Information if not set explicitly' }}</title>
Это мой первый ответ здесь. Надеюсь, это сработает.Удачи вам!
похоже, что я могу передавать переменные всему макету, используя атрибуты объекта макета, например, для решения моей проблемы я смог сделать следующее:
$this->layout->title = 'Home page';
самый простой способ решить:
view()->share('title', 'My Title Here');
или с помощью view Facade:
use View; ... View::share('title', 'My Title Here');
$data['title'] = $this->layout->title = 'The Home Page'; $this->layout->content = View::make('home', $data);
Я сделал это до сих пор, потому что мне нужно было как в представлении, так и в главном файле. Кажется, если вы не используете $this->layout->title, он не будет доступен в главном макете. Улучшения приветствуются!
можно попробовать:
public function index() { return View::make('pages/index', array('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'); }
в файле шаблона Блейда не забудьте использовать @ перед переменной.
... <title>{{ $title or '' }}</title> ... @yield('content') ...