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'rsでは、インクルードで使用することもできます。
@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')
...
あなたが試すことができます:
public function index()
{
return View::make('pages/index', array('title' => 'Home page'));
}