it-swarm.com.de

Wie übergebe ich mit Laravel 'Blade Templating eine Variable an das Layout?

In Laravel 4 verwendet mein Controller ein Blade-Layout:

class PagesController extends BaseController {
    protected $layout = 'layouts.master';
}

Das Master-Layout gibt den Variablentitel aus und zeigt dann eine Ansicht an:

...
<title>{{ $title }}</title>
...
@yield('content')
....

In meinem Controller scheint es mir jedoch nur möglich zu sein, Variablen an die Unteransicht zu übergeben, nicht an das Layout. Eine Aktion könnte beispielsweise sein:

public function index()
{
    $this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}

Dadurch wird nur die Variable $title An den Inhaltsabschnitt der Ansicht übergeben. Wie kann ich diese Variable für die gesamte Ansicht oder zumindest für das Master-Layout bereitstellen?

66
Dwight

Wenn Sie in Ihrem Inhaltslayout @extends Verwenden, können Sie Folgendes verwenden:

@extends('master', ['title' => $title])
178
s3v3n

Für zukünftige Google'rs, die Laravel 5 verwenden, können Sie es jetzt auch mit Includes verwenden,

@include('views.otherView', ['variable' => 1])
34
Chilion

Ich konnte dieses Problem lösen, indem ich dies zu meiner Controller-Methode hinzufügte:

    $title = 'My Title Here';
    View::share('title', $title);

$ this-> layout-> title = 'Startseite'; hat auch nicht funktioniert.

19
Mwirabua Tim

In der Blade-Vorlage: Definieren Sie eine Variable wie diese

@extends('app',['title' => 'Your Title Goes Here'])
@section('content')

Und in der app.blade.php oder einer anderen Ihrer Wahl (ich folge nur Standard Laravel 5 Setup)

<title>{{ $title or 'Default title Information if not set explicitly' }}</title>

Dies ist meine erste Antwort hier. Hoffe es funktioniert. Viel Glück!

11
Rohan Krishna

Einfachster Weg zu lösen:

view()->share('title', 'My Title Here');

Oder mit view Facade:

use View;

...

View::share('title', 'My Title Here');
4
Efra

Es sieht so aus, als ob ich mithilfe von Attributen auf dem Layoutobjekt Variablen an das gesamte Layout übergeben kann. Um beispielsweise mein Problem zu lösen, konnte ich Folgendes tun:

$this->layout->title = 'Home page';
4
Dwight
class PagesController extends BaseController {
    protected $layout = 'layouts.master';

    public function index()
    {
        $this->layout->title = "Home page";
        $this->layout->content = View::make('pages/index');
    }
}

Denken Sie in der Blade-Vorlagendatei daran, @ vor der Variablen zu verwenden.

...
<title>{{ $title or '' }}</title>
...
@yield('content')
...
2
Shiro

Du kannst es versuchen:

public function index()
{
    return View::make('pages/index', array('title' => 'Home page'));
}
0
Melvin