質問

私は私のすべてのビューで同じメニューが必要です。

だから私は私のBaseControllerで定義されているコンストラクタ内のメニューを出力するために必要なデータを取得します。

最初にView :: Composerを使いようとしましたがDunno私はエラーが発生しない理由:: composerはまったく実行されません...

View :: Shareを使用した場合、その仕事

// BaseController.php

//function called in the constructor
public function init()
{
    $envs = $this->game->environments()->get();

    View::share('test', $envs);

    View::composer('layouts.base', function($view)
    {
        $view->with('envs', $envs);
    });
}
.

// base.twig

//nothing output here, no error
{% for env in envs %}
         {{ env.name }}
{% endfor %}

//its work
{% for env in test %}
         {{ env.name }}
{% endfor %}
.

私はLaravelに新しく、私は何かが恋しいですか?

役に立ちましたか?

解決

これが機能していない理由は、あなたがあなたのコードにビュー作曲者を置く場所のためです。Laravelのビュー作曲家は、ビューがレンダリングされるとすぐに実行される基本的にコールバックです。このinit()関数はどこに定義されていますか?私の推測は、ビューが作成されていることですの前にあなたのView Composerが定義されています - ビューのComposerのコールバックが実行されないことを意味します。

init()関数からView Composerブロック全体を移動して、それをroutes.phpファイルの下部に追加して、それが機能するかどうかを確認してください。それはあなたのビューの作曲家を配置するのは悪い場所ではありません。あなたがそれらを保存するために新しいクラスを作成して、オートロードパスにそのパスを追加することができます。

View Composersについてもっと読むこちら

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top