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


91

Laravel 4では、コントローラーはブレードレイアウトを使用しています。

class PagesController extends BaseController {
    protected $layout = 'layouts.master';
}

マスターレイアウトには変数titleが出力され、ビューが表示されます。

...
<title>{{ $title }}</title>
...
@yield('content')
....

ただし、私のコントローラーでは、変数をサブビューに渡すことしかできず、レイアウトを渡すことができないようです。たとえば、アクションは次のようになります。

public function index()
{
    $this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}

これにより、$title変数はビューのコンテンツセクションにのみ渡されます。その変数をビュー全体、または少なくともマスターレイアウトに提供するにはどうすればよいですか?

回答:


217

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

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

1
これを見つけるのにたくさんのグーグルが必要でした!完璧にするために必要なのはこの構文だけであり、ドキュメントにはこれらすべての微妙な点が示されていません。つまり、これは公式ドキュメントが言っていることです@component('alert', ['foo' => 'bar'])......
ArthurTarasov18年

これを行っていると、レイアウトページで未定義のエラーが発生します。何か案は?
LucyTurtle 2018年

45

Laravel 5を使用する将来のGoogleのユーザーは、インクルードと一緒に使用することもできます。

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

これは、laravelでコンポーネントベースのアプリケーションを最終的に作成するために私が探しているものです、ありがとう!
ロンマイケル

["one"]のみを渡した場合、テンプレートで取得するにはどうすればよいですか?
ハビエルJソリスフローレス

20

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

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

$ this-> layout-> title = 'ホームページ'; どちらも機能しませんでした。


これはlaravel5.1でうまくいきました。問題を解決する最も簡単な方法。
codeChuck 2015年

16

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

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

これが私の最初の答えです。それがうまくいくことを願っています。頑張ってください!


これは私が数時間を節約するのに役立ちました..!Laravel 5.4で使用し、うまく機能します。回答ありがとうございます...
Saiyan Prince

2
私がしなければならなかった:{{ $title ?? 'Default Title' }}
ダミアンÓCeallaigh18年

5

解決する最も簡単な方法:

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

またはビューファサードを使用する:

use View;

...

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

ルートミドルウェアで実行できますか?
ムカデ2018

4

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

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

8
これは私にはうまくいきませんでした。現在、変数として存在しないというエラーが表示されます。
Adam Libonatti-Roche 2013

レイアウトオブジェクトはどこにありますか?
YevgeniyAfanasyev18年

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

@YevgeniyAfanasyev、この質問は投稿の所有者に質問する必要があります。彼のコーディングを振り返るだけです。あなたが私に尋ねる奇妙な種類....そしてこれは2014年に答えられました。もちろん私は彼が尋ねたバージョンであるLaravel4について言及していました
Shiro

0

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

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

0

この簡単な方法を試してみてください:コントローラー内:-

 public function index()
   {
        $data = array(
            'title' => 'Home',
            'otherData' => 'Data Here'
        );
        return view('front.landing')->with($data);
   }

そしてあなたのレイアウト(app.blade.php):

<title>{{ $title }} - {{ config('app.name') }} </title>

それで全部です。


これがどのように問題を解決するか説明できますか?そして、それは以前の(特に受け入れられた)答えに加えてどのような新しい貢献をしますか?
GST

SOへようこそ!答えを出すときは、たとえそれが大丈夫であっても、少し説明する必要があります。あなたの場合、似たようなものがあるので、答えの長所と短所を説明するようにしてください。
デビッド・ガルシアBodego

0

セクションの変数を取得したい場合は、次のように支払うことができます。

$_view      = new \View;
$_sections  = $_view->getFacadeRoot()->getSections();
dd($_sections);
/*
Out:
array:1 [▼
  "title" => "Painel"
]
*/

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

ビューとマスターファイルの両方で必要だったので、これまでこれを実行しました。$ this-> layout-> titleを使用しない場合、マスターレイアウトでは使用できないようです。改善を歓迎します!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.