6

現在、いくつかのプロジェクトで Laravel フレームワークを使用していますが、私が気に入らない問題が 1 つあります。それは次の問題です。

ホームページとコンテンツページがあるとしましょう

HomepageController にはすべてのホームページ固有の php コードがあります ContentpageController にはすべてのコンテンツ固有の php コードがあります

app.blade.php があります。

@yield('page')

HomepageController は、次を含むビューの website.blade.php を呼び出します。

@extends('app')

@section('page')
     Some HTML part
     @include('parts.top_5')
@endsection

ContentController はビュー content.blade.php を呼び出します。

@extends('app')

@section('page')
     Some different HTML part
     @include('parts.top_5')
@endsection

ここでは、両方のページに parts.top_5 が含まれていることがわかります。上位 5 つは、上位 5 を出力するためにいくつかの特定の変数を必要とします。問題は、現在両方のコントローラーまたはグループ化されたミドルウェアで上位 5 変数のコードをコピーしていることですが、パーツが含まれている場合にブレード固有の変数を生成するためのより良い解決策はありますか? ブレード テンプレートの読み込み時にコントローラー関数を実行するのと少し似ていますか?

私はインターネットを検索してきましたが、同じ質問を持つ人を見つけることができないようです. うまくいけば、誰かがこの驚異的な問題について私を助けてくれるでしょう!

4

1 に答える 1

2

このバインディングを AppServiceProvider に追加できます

(または必要なカスタム ServiceProvider)

このような:

public function boot()
{
    $view->composer('parts.top_5', function($view) {
        $view->with('any_data' => 'You want');
    })
}

このようにして、Laravel がparts.top_5ビューを構成するたびに、このクロージャー メソッドがトリガーされます。

ドキュメントではここにあります: http://laravel.com/docs/5.0/views#view-composers

于 2015-05-22T12:09:01.093 に答える