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

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뷰의 콘텐츠 섹션 에만 변수를 전달합니다 . 전체보기 또는 최소한 마스터 레이아웃에 해당 변수를 제공하려면 어떻게해야합니까?



답변

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

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


답변

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

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


답변

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

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

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


답변

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

@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>

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


답변

가장 간단한 해결 방법 :

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

또는 View Facade 사용 :

use View;

...

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


답변

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

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


답변

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')
...