Bagaimana cara mengirimkan variabel ke layout menggunakan Laravel 'Blade templating?


91

Di Laravel 4, pengontrol saya menggunakan tata letak Blade:

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

Tata letak master mengeluarkan judul variabel dan kemudian menampilkan tampilan:

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

Namun, di pengontrol saya, saya hanya tampak dapat meneruskan variabel ke subview, bukan tata letak. Misalnya, suatu tindakan bisa berupa:

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

Ini hanya akan meneruskan $titlevariabel ke bagian konten tampilan. Bagaimana cara memberikan variabel itu ke seluruh tampilan, atau setidaknya tata letak master?

Jawaban:


217

Jika Anda menggunakan @extendstata letak konten Anda, Anda dapat menggunakan ini:

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

1
Saya butuh banyak googling untuk menemukan ini! Ini hanya sintaksis yang Anda harus menjadi sempurna dan dokumen tidak menunjukkan semua kehalusan ini. Maksud saya, inilah yang dikatakan dokumen resmi @component('alert', ['foo' => 'bar'])......
Arthur Tarasov

Saya melakukan ini dan saya mendapatkan kesalahan yang tidak ditentukan pada halaman tata letak. Ada ide?
LucyTurtle

45

Untuk Google di masa mendatang yang menggunakan Laravel 5, Anda sekarang juga dapat menggunakannya dengan menyertakan,

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

inilah yang saya cari untuk akhirnya membuat aplikasi berbasis komponen di laravel, terima kasih!
Ron Michael

jika saya hanya lolos ["satu"], bagaimana cara mendapatkannya di template?
Javier J Solis Flores

20

Saya dapat menyelesaikan masalah itu dengan menambahkan ini ke metode pengontrol saya:

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

$ this-> layout-> title = 'Beranda'; tidak berhasil.


Ini berhasil untuk saya di laravel 5.1. Cara termudah untuk menyelesaikan masalah.
CodeChuck

16

Di Template Blade: tentukan variabel seperti ini

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

Dan di app.blade.php atau pilihan Anda lainnya (Saya hanya mengikuti pengaturan Laravel 5 default)

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

Ini adalah jawaban pertama saya di sini. Semoga berhasil. Semoga berhasil!


Ini membantu saya menghemat beberapa jam ..! Digunakan di Laravel 5.4 dan bekerja dengan baik .. Terima kasih atas jawabannya ...
Saiyan Prince

2
Saya harus melakukan:{{ $title ?? 'Default Title' }}
Damien Ó Ceallaigh

5

Cara termudah untuk menyelesaikannya:

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

Atau menggunakan tampilan Fasad:

use View;

...

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

dapatkah saya menjalankannya di middleware rute?
mukade

4

Tampaknya seolah-olah saya dapat meneruskan variabel ke seluruh tata letak menggunakan atribut pada objek tata letak, misalnya untuk menyelesaikan masalah saya, saya dapat melakukan hal berikut:

$this->layout->title = 'Home page';

8
Ini tidak berhasil untuk saya. Saat ini saya mendapatkan kesalahan yang menyatakan bahwa itu tidak ada sebagai variabel.
Adam Libonatti-Roche

di mana saya bisa menemukan objek layout?
Yevgeniy Afanasyev

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

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

Pada file Template Blade, INGAT menggunakan @ di depan variabel.

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

@YevgeniyAfanasyev, pertanyaan ini harus Anda tanyakan kembali kepada pemilik postingan. Saya hanya mereferensikan kembali kodingnya. Agak aneh Anda bertanya kembali kepada saya .... Dan ini dijawab pada tahun 2014. Tentu saja saya mengacu pada versi yang dia tanyakan yaitu Laravel 4.
Shiro

0

Anda dapat mencoba:

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

0

coba saja metode sederhana ini: dalam pengontrol: -

 public function index()
   {
        $data = array(
            'title' => 'Home',
            'otherData' => 'Data Here'
        );
        return view('front.landing')->with($data);
   }

Dan di tata letak Anda (app.blade.php):

<title>{{ $title }} - {{ config('app.name') }} </title>

Itu saja.


Bisakah Anda menjelaskan bagaimana ini menyelesaikan masalah? Dan apa yang baru yang disumbangkannya di atas jawaban sebelumnya (yang diterima secara khusus)?
gst

Selamat datang di SO! Ketika Anda memberikan jawaban, meskipun tidak apa-apa, Anda harus menjelaskannya sedikit, dan dalam kasus Anda, karena ada yang serupa, coba jelaskan pro dan kontra dari jawaban Anda.
David García Bodego

0

jika Anda ingin mendapatkan variabel bagian, Anda dapat membayar seperti ini:

$_view      = new \View;
$_sections  = $_view->getFacadeRoot()->getSections();
dd($_sections);
/*
Out:
array:1 [▼
  "title" => "Painel"
]
*/

-2
$data['title'] = $this->layout->title = 'The Home Page';
$this->layout->content = View::make('home', $data);

Saya telah melakukan ini sejauh ini karena saya membutuhkan file view dan master. Tampaknya jika Anda tidak menggunakan $ this-> layout-> title itu tidak akan tersedia di master layout. Perbaikan diterima!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.