W Laravel 4 mój kontroler używa układu Blade:
class PagesController extends BaseController {
protected $layout = 'layouts.master';
}
Układ główny wyprowadza tytuł zmiennej, a następnie wyświetla widok:
...
<title>{{ $title }}</title>
...
@yield('content')
....
Jednak w moim kontrolerze wydaje mi się, że jestem w stanie przekazywać zmienne do widoku podrzędnego, a nie do układu. Na przykład działaniem może być:
public function index()
{
$this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}
Spowoduje to przekazanie $title
zmiennej tylko do sekcji zawartości widoku. Jak mogę dostarczyć tę zmienną do całego widoku lub przynajmniej do układu głównego?
@component('alert', ['foo' => 'bar'])
......Dla przyszłych użytkowników Google, którzy używają Laravel 5, możesz teraz używać go również z dołączeniami,
@include('views.otherView', ['variable' => 1])
źródło
Udało mi się rozwiązać ten problem, dodając to do mojej metody kontrolera:
$title = 'My Title Here'; View::share('title', $title);
$ this-> layout-> title = 'Strona główna'; nie zadziałało.
źródło
W szablonie ostrza: zdefiniuj taką zmienną
@extends('app',['title' => 'Your Title Goes Here']) @section('content')
I w app.blade.php lub innym wybranym przez Ciebie (ja tylko podążam za domyślną konfiguracją Laravel 5)
<title>{{ $title or 'Default title Information if not set explicitly' }}</title>
To jest moja pierwsza odpowiedź. Mam nadzieję, że to zadziała. Powodzenia!
źródło
{{ $title ?? 'Default Title' }}
Najprostszy sposób rozwiązania:
view()->share('title', 'My Title Here');
Lub używając widoku Fasada:
use View; ... View::share('title', 'My Title Here');
źródło
Wygląda na to, że mogę przekazywać zmienne do całego układu za pomocą atrybutów w obiekcie układu, na przykład w celu rozwiązania mojego problemu udało mi się wykonać następujące czynności:
$this->layout->title = 'Home page';
źródło
class PagesController extends BaseController { protected $layout = 'layouts.master'; public function index() { $this->layout->title = "Home page"; $this->layout->content = View::make('pages/index'); } }
W pliku szablonu ostrza PAMIĘTAJ, aby umieścić znak @ na początku zmiennej.
... <title>{{ $title or '' }}</title> ... @yield('content') ...
źródło
Możesz spróbować:
public function index() { return View::make('pages/index', array('title' => 'Home page')); }
źródło
po prostu wypróbuj tę prostą metodę: w kontrolerze: -
public function index() { $data = array( 'title' => 'Home', 'otherData' => 'Data Here' ); return view('front.landing')->with($data); }
A w twoim układzie (app.blade.php):
<title>{{ $title }} - {{ config('app.name') }} </title>
To wszystko.
źródło
jeśli chcesz uzyskać zmienne sekcji, możesz zapłacić w ten sposób:
$_view = new \View; $_sections = $_view->getFacadeRoot()->getSections(); dd($_sections); /* Out: array:1 [▼ "title" => "Painel" ] */
źródło
$data['title'] = $this->layout->title = 'The Home Page'; $this->layout->content = View::make('home', $data);
Zrobiłem to do tej pory, ponieważ potrzebowałem zarówno widoku, jak i pliku głównego. Wygląda na to, że jeśli nie użyjesz $ this-> layout-> title, nie będzie on dostępny w głównym układzie. Mile widziane ulepszenia!
źródło