2015-01-03 32 views
0

這是我第一次使用Laravel的經驗,到目前爲止,我在傳遞數據到視圖時遇到一些困難。我的應用程序是單頁網站,頂部有一個菜單,列出了所有產品類別,下面是每個產品或產品的縮略圖網格。訪客能夠按照他們選擇的類別過濾產品。如何將數據從不同的控制器/操作發送到相同的視圖?

Route::get('home/{category}', array('as'=>'itemshome', 'uses'=>'[email protected]')); 

所以在我的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類型模型的主視圖發送數據,或者如果它這將是一個更好的方法來定義一個新的CategoryController和值傳遞從那裏。

回答

0

在同一請求期間,您不能只使用另一個控制器將數據發送到同一視圖。

要麼把它添加到視圖發出呼叫:

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'; 
+0

第一個建議是工作的感謝!只是不知道在那裏我必須把View Composer的代碼。 – user3130117

+0

我更新了答案,詳細說明了將視圖作曲人放到哪裏 – lukasgeiter

相關問題