如何将来自不同控制器/操作的数据发送到同一视图?

时间:2015-01-03 19:00:15

标签: laravel routes controllers

这是我第一次使用Laravel,到目前为止,我在将数据传递给视图时遇到了一些困难。我的应用程序是一个单页网站,顶部有一个菜单,列出了所有产品类别,下面是每个项目或产品的缩略图网格。访问者可以按照他们选择的类别过滤产品。

Route::get('home/{category}', array('as'=>'itemshome', 'uses'=>'ItemsController@index'));

所以在我的ItemsControllers中,我从项目模型中获取一些项目并将它们传递给视图。

class ItemsController extends \BaseController {


public function index($category)
{
    return View::make('home/index', ['items' => Item::where('publishtime', '<', 
 date('Y-m-d H:i:s'))->where('category_id','=',$category)->paginate(24)]);

}

此时我不确定是否应该使用ItemsController将数据从Category模型发送到主视图,或者它是否是更好的方法来定义新的CategoryController并从那里传递值

1 个答案:

答案 0 :(得分:0)

在同一请求中,您无法使用其他控制器将数据发送到同一视图。

将其添加到视图make调用:

return View::make('home/index', [
    'items' => Item::where('publishtime', '<', date('Y-m-d H:i:s'))->where('category_id','=',$category)->paginate(24),
    'categories' => Category::all()
];

或者,如果类别数据实际上与项目控制器无关但视图需要,则可以注册view composer

View::composer('home/index', function($view){
    $view->with('categories', Category::all());
});

现在每次呈现home/index视图时,都会注入categories

您实际上可以将视图编辑器放在任何您想要的位置。但是,我建议您添加新文件app/composers.php以存储所有视图作曲家。然后你需要把它包含在某个地方。例如,在底部的app/start/global.php中:

require app_path().'/composers.php';