Laravel'in Blade şablonunu kullanarak bir değişkeni düzene nasıl aktarırım?


91

Laravel 4'te, denetleyicim bir Blade düzeni kullanıyor:

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

Ana mizanpaj, değişken başlığının çıktısını alır ve ardından bir görünüm görüntüler:

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

Ancak, denetleyicimde, değişkenleri yalnızca alt görünüme aktarabiliyorum, düzene değil. Örneğin, bir eylem şöyle olabilir:

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

Bu, $titledeğişkeni yalnızca görünümün içerik bölümüne aktarır. Bu değişkeni tüm görünüme veya en azından ana yerleşime nasıl sağlayabilirim?

Yanıtlar:


217

@extendsİçerik düzeninizde kullanıyorsanız , bunu kullanabilirsiniz:

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

1
Bunu bulmam çok fazla googling'i aldı! Mükemmel olmanız gereken sadece bu sözdizimidir ve dokümanlar tüm bu incelikleri göstermez. Demek istediğim, resmi belgelerin söylediği şey bu @component('alert', ['foo' => 'bar'])......
Arthur Tarasov

Bunu yapıyorum ve düzen sayfasında tanımsız bir hata alıyorum. Herhangi bir fikir?
LucyTurtle

45

Laravel 5 kullanan gelecekteki Google’lar için artık şunları da dahil edebilirsiniz:

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

Laravel'de nihayet bileşen tabanlı bir uygulama oluşturmak için aradığım şey bu, teşekkürler!
Ron Michael

yalnızca ["bir"] 'i geçersem, bunu şablona nasıl getiririm?
Javier J Solis Flores

20

Bunu denetleyici yöntemime ekleyerek bu sorunu çözebildim:

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

$ this-> layout-> title = 'Ana sayfa'; da işe yaramadı.


Bu benim için Laravel 5.1'de çalıştı. Sorunu çözmenin en kolay yolu.
CodeChuck

16

Blade Şablonunda: bunun gibi bir değişken tanımlayın

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

Ve app.blade.php'de veya seçtiğiniz herhangi bir yerde (sadece varsayılan Laravel 5 kurulumunu takip ediyorum)

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

Bu benim buradaki ilk cevabım. Umarım işe yarar. İyi şanslar!


Bu bana birkaç saat kazandırdı ..! Laravel 5.4'te kullandım ve harika çalışıyor .. Cevabınız için teşekkürler ...
Saiyan Prince

2
Yapmam gerekiyordu:{{ $title ?? 'Default Title' }}
Damien Ó Ceallaigh

5

Çözmenin en basit yolu:

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

Veya Cephe görünümünü kullanarak:

use View;

...

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

onu bir rota ara yazılımında çalıştırabilir miyim?
mukade

4

Görünüşe göre düzen nesnesindeki öznitelikleri kullanarak değişkenleri tüm düzene aktarabiliyorum, örneğin sorunumu çözmek için aşağıdakileri yapabildim:

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

8
Bu benim için işe yaramadı. Şu anda değişken olarak bulunmadığını belirten bir hata alıyorum.
Adam Libonatti-Roche

düzen nesnesini nerede bulabilirim?
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');
    }
}

Blade Şablon dosyasında, değişkenin önünde @ kullanmayı UNUTMAYIN.

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

@YevgeniyAfanasyev, bu soruyu gönderi sahibine sormalısın. Ben sadece kodlamasına geri dönüyorum. Bana geri sorman biraz tuhaf .... Ve bu 2014'te cevaplandı. Elbette sorduğu versiyondan Laravel 4'e atıfta bulunuyordum.
Shiro

0

Deneyebilirsin:

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

0

sadece şu basit yöntemi deneyin: denetleyicide: -

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

Ve sizin düzeninizde (app.blade.php):

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

Bu kadar.


Bunun sorunu nasıl çözdüğünü açıklayabilir misiniz? Ve önceki (özellikle kabul edilen) cevapların ötesinde hangi yeniliklere katkıda bulunuyor?
gst

SO'ya hoş geldiniz! Bir cevap verdiğinizde, uygun olsa bile, biraz açıklamalısınız ve sizin durumunuzda, benzer bir cevap olduğu için, cevabınızın artılarını ve eksilerini açıklamaya çalışın.
David García Bodego

0

Bölümlerin değişkenlerini almak istiyorsanız şu şekilde ödeme yapabilirsiniz:

$_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);

Bunu şimdiye kadar yaptım çünkü hem görünümde hem de ana dosyada ihtiyacım vardı. $ This-> layout-> title kullanmıyorsanız, ana düzende kullanılamayacak gibi görünüyor. İyileştirmeler hoş geldiniz!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.