Laravel의 블레이드 템플릿을 사용하여 레이아웃에 변수를 어떻게 전달합니까?


91

Laravel 4에서 컨트롤러는 블레이드 레이아웃을 사용합니다.

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

마스터 레이아웃은 변수 제목을 출력 한 다음보기를 표시합니다.

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

그러나 내 컨트롤러에서는 레이아웃이 아닌 하위 뷰에만 변수를 전달할 수있는 것으로 보입니다. 예를 들어 작업은 다음과 같습니다.

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

이것은 $title뷰의 콘텐츠 섹션 에만 변수를 전달합니다 . 전체보기 또는 최소한 마스터 레이아웃에 해당 변수를 제공하려면 어떻게해야합니까?

답변:


217

@extends콘텐츠 레이아웃에서 사용하는 경우 다음을 사용할 수 있습니다.

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

1
이것을 찾기 위해 많은 인터넷 검색이 필요했습니다! 완벽해야하는 것은 바로이 구문이며 문서는 이러한 모든 미묘함을 보여주지 않습니다. 내 말은 이것이 공식 문서가 말하는 것입니다 @component('alert', ['foo' => 'bar'])......
Arthur Tarasov

이 작업을 수행하고 레이아웃 페이지에서 정의되지 않은 오류가 발생합니다. 어떤 아이디어?
LucyTurtle

45

Laravel 5를 사용하는 미래의 Google 직원을 위해 이제 include와 함께 사용할 수도 있습니다.

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

이것이 마침내 laravel에서 구성 요소 기반 응용 프로그램을 만들기 위해 찾고있는 것입니다. 감사합니다!
Ron Michael

[ "one"] 만 통과하는 경우 템플릿에서 어떻게 가져 옵니까?
Javier J Solis Flores

20

이 문제를 컨트롤러 메서드에 추가하여이 문제를 해결할 수있었습니다.

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

$ this-> layout-> title = '홈 페이지'; 또한 작동하지 않았습니다.


이것은 laravel 5.1에서 나를 위해 일했습니다. 문제를 해결하는 가장 쉬운 방법.
CodeChuck 2015 년

16

블레이드 템플릿에서 : 다음과 같은 변수 정의

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

그리고 app.blade.php 또는 원하는 다른 곳에서 (기본 Laravel 5 설정을 따르고 있습니다)

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

이것이 나의 첫 번째 대답입니다. 잘 되길 바랍니다. 행운을 빕니다!


이것은 몇 시간을 절약하는 데 도움이되었습니다 ..! Laravel 5.4을 사용하고는 ... 대답에 대한 좋은 .. 감사합니다 일
사이어인 왕자

2
나는해야했다 :{{ $title ?? 'Default Title' }}
Damien Ó Ceallaigh

5

가장 간단한 해결 방법 :

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

또는 View Facade 사용 :

use View;

...

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

경로 미들웨어에서 실행할 수 있습니까?
mukade

4

레이아웃 객체의 속성을 사용하여 전체 레이아웃에 변수를 전달할 수있는 것처럼 보입니다. 예를 들어 내 문제를 해결하기 위해 다음을 수행 할 수있었습니다.

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

8
이것은 나를 위해 작동하지 않았습니다. 현재 변수로 존재하지 않는다는 오류가 발생합니다.
Adam Libonatti-Roche 2013

레이아웃 개체는 어디에서 찾을 수 있습니까?
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');
    }
}

블레이드 템플릿 파일에서 변수 앞에 @를 사용해야합니다.

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

@YevgeniyAfanasyev,이 질문은 게시물 소유자에게 다시 물어봐야합니다. 나는 그의 코딩을 다시 언급합니다. 당신이 저에게 물어 보면 좀 이상 하군요 .... 그리고 이것은 2014 년에 답변되었습니다. 물론 저는 그가 묻는 버전이 Laravel 4임을 언급했습니다.
Shiro

0

당신은 시도 할 수 있습니다:

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

0

이 간단한 방법을 시도하십시오 : 컨트롤러에서 :-

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

그리고 레이아웃 (app.blade.php)에서 :

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

그게 다야.


이것이 어떻게 문제를 해결하는지 설명해 주시겠습니까? 그리고 그것은 이전의 (특히 받아 들여지는) 답변보다 더 많이 기여하는 새로운 것은 무엇입니까?
gst

SO에 오신 것을 환영합니다! 대답을 할 때 괜찮더라도 조금 설명하고, 당신의 경우에는 비슷한 것이 있기 때문에 대답의 장단점을 설명하십시오.
David García Bodego

0

섹션의 변수를 얻으려면 다음과 같이 지불 할 수 있습니다.

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

보기와 마스터 파일이 모두 필요했기 때문에 지금까지이 작업을 수행했습니다. $ this-> layout-> title을 사용하지 않으면 마스터 레이아웃에서 사용할 수 없습니다. 개선을 환영합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.