web-dev-qa-db-ja.com

Laravel 'Bladeテンプレートを使用してレイアウトに変数を渡すにはどうすればよいですか?

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変数のみを渡します。その変数をビュー全体に、または少なくともマスターレイアウトに提供するにはどうすればよいですか?

66
Dwight

コンテンツレイアウトで@extendsを使用している場合、これを使用できます。

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

Laravel 5を使用する将来のGoogle'rsでは、インクルードで使用することもできます。

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

これをコントローラーメソッドに追加することで、この問題を解決できました。

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

$ this-> layout-> title = 'ホームページ';動作しませんでした。

19
Mwirabua Tim

ブレードテンプレートで:このような変数を定義します

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

これが私の最初の答えです。うまくいきますように!

11
Rohan Krishna

最も簡単な解決方法:

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

または、View Facadeを使用して:

use View;

...

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

レイアウトオブジェクトの属性を使用して、レイアウト全体に変数を渡すことができるように見えます。たとえば、私の問題を解決するために、次のことができました。

$this->layout->title = 'Home page';
4
Dwight
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')
...
2
Shiro

あなたが試すことができます:

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