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.