2016-08-26 48 views
0

我已經看到了一些類似的問題,我的常見答案是使用視圖編輯器。我有一個HomeController,通過將查詢數據傳遞給關聯的視圖來顯示數據庫中的文章,它可以工作see this image link將數據放入主刀片 - Laravel

正如你所看到的,有一個導航欄,由主佈局layout.master生成。

對於導航中的每個標題,我試圖通過生成鏈接的for循環顯示該部分的每篇文章。

我的代碼是這樣的。

public function index() 
{ 
    $loans_articles = Article::byDepartment('Loans')->get(); 
    $digital_articles = Article::byDepartment('Digital')->get(); 
    $consulting_articles = Article::byDepartment('Consulting')->get(); 

    return view('welcome', 
     [ 
     'loans_articles' => $loans_articles, 
     'digital_articles' => $digital_articles, 
     'consulting_articles' => $consulting_articles, 
     ]); 

} 

正如您所看到的,我將這些數據返回到歡迎頁面。

在我的導航欄我試圖

@if(count($loans_articles) > 0) 
      @foreach($loans_articles as $ls) 

     <!--for each loop which grabs the articles with department Loans--> 
     <li><a href="/article/{{ $ls->id }}">{{ $ls->title }}</a></li> 

      @endforeach 
     @endif 

但只要您導航從主頁離開導航欄不知道$ loans_article是什麼。

是否有一種乾淨的方式將這些數據傳遞到主刀片導航而不會將相同的數據發送到每個子視圖?

回答

0

我傾向於實現這一目標是通過使一個變量可以以這種方式每個視圖方式:

您的所有控制器都應該擴展一個基本控制器,該控制器通常位於app/Http/Controllers/Controller.php。在這個控制器內部,你可以放置一些將被所有擴展控制器使用的代碼。

在此基礎控制器,你可以做一個變量到所有視圖中,類似這樣的...

class Controller extends BaseController 
{ 
    public function __construct() 
    { 
     // Load your objects 
     $loans_articles = Article::byDepartment('Loans')->get(); 

     // Make it available to all views by sharing it 
     view()->share('loans_articles', $loans_articles); 
    } 
} 

你的控制器的所有必須延長該控制器爲此工作。

如果您的任何控制器都有自己的構造函數,還必須確保調用parent::__construct()以確保運行上述代碼。如果您的控制器沒有自己的構造函數,則可以省略調用parent::__construct()

public class HomeController extends Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 

     // Your constructor code here.. 
    } 
} 

這樣,您應該可以在所有視圖中使用$loans_articles