Laravel:在包含视图中使用控制器


Laravel : Using controller in included view

我有一个用控制器渲染的视图。调用视图的函数已链接到我的路线中。当直接访问路由时,它工作得很好,但很明显,当我将控制器包含在模板中时,它不包含在内。

当我包含视图时,如何使用我的控制器?

我在拉拉威尔3号。

现在我有我的控制器:

public function get_current()
{
// $sales = ...
return View::make('sale.current')->with('sales',$sales);
}

我的路线(obv只适用于GET/current):

Route::get('current', 'sale@current');

我的主视图

@include('sale.current')

然后我的sale.current视图调用$sales

@foreach($sales as $sale)

谢谢!

因此,当您想从视图中调用一些laravel控制器操作来呈现另一个部分视图时,就会出现这种情况。尽管你可以找到一个或另一个黑客围绕它。然而,请注意,laravel控制器并不是为了这个。

当你遇到这种情况时,你想再次重用同一个视图,但不想再次提供所有必要的数据&在多个控制器操作中,现在是您应该探索Laravel View Composers的时候了。

这是官方文档链接:https://laravel.com/docs/master/views#view-作曲家

以下是更详细的版本:https://scotch.io/tutorials/sharing-data-between-views-using-laravel-view-composers

这是在没有任何补丁的情况下实现它的标准方法。

你的问题还不清楚,但我可以帮你。我用你给出的要求做了一个小例子。我创建了一个到动作控制器的路线,如下所示:

Route::get('test', 'TestController@test');

TestController中,我将动作test定义如下:

public function test()
{
  return View::make('test.home')->with('data', array('hello', 'world', '!'));
}

根据您的要求,您定义了一个视图,该视图包含来自另一个视图(布局)的内容,并且在该布局中,您使用传递给动作控制器的数据。我创建如下视图:

// home.blade.php
<h1>Message</h1>
@include('test.test')

// test.blade.php
<?php print_r($data); ?>

当我访问"测试"时,我可以看到print_r输出。我不知道你是不是在这么做,但就我而言,效果很好。

我希望这能帮助你。