Program Tip

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

programtip 2020. 11. 12. 20:09
반응형

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>

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


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

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

가장 간단한 해결 방법 :

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

또는 View Facade 사용 :

use View;

...

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

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

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

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

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

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

참고 URL : https://stackoverflow.com/questions/16118104/how-do-i-pass-a-variable-to-the-layout-using-laravel-blade-templating

반응형