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