Laravel、View :: Shareではなく、View :: Composerでの可変出力作業
質問
私は私のすべてのビューで同じメニューが必要です。
だから私は私の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についてもっと読むこちら
所属していません StackOverflow