这是我第一次使用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并从那里传递值
答案 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';