2014-09-29 50 views
2

如何在一條路線中使用2個控制器?(Laravel)如何在1條路徑中使用2個控制器?

這裏的目標是創建多個頁面,每個頁面有1個職業(例如會計師),然後將他們鏈接到提供會計課程的學校。

一個例子頁面將包括:
1.會計師職業信息(我在這裏使用「職業」控制器)
2.學校提供會計課程(我在這裏使用一個單獨的「學校」控制器)。

Route::get('/accountants-career', '[email protected]'); 
Route::get('/accountants-career', '[email protected]'); 

使用上面的代碼將覆蓋1個控制器。

有沒有解決方案來解決這個問題?

回答

4

你不能那樣做,因爲這不是一件好事,而且Laravel不要讓你有相同的路徑來打兩個不同的控制器動作,除非你使用不同的HTTP方法(POST,GET)。 ..)。控制器是一個HTTP請求處理程序,而不是一個服務類,所以你可能將不得不稍微改變你的設計,這是一種方法:

如果你要在一個頁面中顯示所有數據,創建一個單個路由器:

Route::get('/career', '[email protected]'); 

創建一個瘦小的控制器,只得到信息並傳遞給你的觀點:

use View; 

class CareerController extends Controller { 

    private $repository; 

    public function __construct(DataRepository $repository) 
    { 
     $this->repository = $repository; 
    } 

    public function index(DataRepository $repository) 
    { 
     return View::make('career.index')->with('data', $this-repository->getData()); 
    } 

} 

,並創建一個DataRepository類,負責瞭解如何在需要的情況下做那種數據:

class DataRepository { 

    public getData() 
    { 
     $data = array(); 

     $data['accountant'] = Accountant::all(); 

     $data['schools'] = School::all(); 

     return $data; 
    } 

} 

請注意,該存儲庫正在自動注入到您的控制器中,Laravel會爲您執行此操作。

+0

依賴注入最好的例子之一,我見過。 – Sina 2016-10-17 04:52:56

0

是否存在需要使用相同路由名稱的具體原因? 當你處理它們時,你無法將路線告訴laravel。

爲什麼不是這樣的;

Route::get('/accountants/career', '[email protected]'); 
Route::get('/accountants/schools', '[email protected]'); 

如果你有多個職業去基於他們的價值相同的控制器和方法,你也可以做這樣的事情。 這允許您有一個單獨的呼叫,您可以爲每個批准的值調用,而不必爲每個值設置單獨的路由和控制器方法。

Route::get('/{careerName}/career', '[email protected]'); 
Route::get('/{careerName}/schools', '[email protected]'); 
+0

這裏的目標是在1頁中使用2個控制器。這是因爲我們希望{職業}和{學校}在1頁以下。將它們分成兩個不同的頁面將會破壞目的。 – 2014-09-29 03:52:18

相關問題