如何使用不同的控制器在Laravel中包含子视图?

时间:2014-08-11 16:08:17

标签: laravel blade nested-views

有许多线程处理子视图,有许多不同的答案。我并没有真正找到匹配的答案,虽然我猜我的模式很常见:

页面显示查询结果。可以通过用户交互使用Ajax更新结果区域。因此,我有两个控制器:

  1. pageDisplay,它呈现整体视图(没有结果)
  2. resultsDisplay,使用子视图生成并呈现结果
  3. 我的问题涉及使用默认设置初始显示结果。如何从resultsDisplay

    调用pageDisplay控制器

    有几个我不能(或不想)使用的选项:

    • 一个初始的Ajax请求,因为考虑到SEO这个解决方案效率不高
    • 使用@include作为主视图包含子视图不知道要发送到子视图的相应变量。这些变量由resultsDisplay控制器
    • 生成
    • resultsDisplay控制器的代码复制到pageDisplay控制器中。这太丑了,难以维持......

    也许我可以从主控制器调用子控制器。但我不知道怎么做,因为子控制器返回一个视图......

    感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为你所追求的是nest()来嵌套子视图。这是一个例子:

// Show view and nest sub view passing $foo and $bar to sub view
$foo = 'Some foo data';
$bar = 'Some bar data';
View::make('pageDisplay')->nest('child', 'resultsDisplay', compact('foo', 'bar));

然后在pageDisplay视图中,您只需回显嵌套视图:

<div id="myChildView">
    {{ $child }}
</div>

在您的子视图中,您可以使用您传递的$foo$bar个变量。

在此处查看官方文档(在将子视图传递给视图下):http://laravel.com/docs/responses#views