2016-03-24 41 views
0

我是laravel的新手,我已經搜索了很多問題的答案,但要麼不適用,要麼我不知道。Laravel單路由指向不同的控制器取決於slu 012

我對處理客戶和事件的客戶端有一個FileMaker解決方案。我的客戶的每位客戶都有自己的活動網站,通過該解決方案進行管理。一個簡單的CMS。每個客戶都會獲得一個帶有諸如clientsite.com/event這樣的網址的網站。

事件中的每個頁面都有一個頁面類型,我想根據類型來尋址不同的控制器。

在routes.php文件我有:

Route::group(['middleware' => ['sal', 'menu']], function() { 

    Route::get('/{event}/{page}', function($event, $page) { 
     // Query page for page-type and use controller depending on type 
    }); 
}); 

有許多頁面類型(標準文本/圖片,專門的表格等),爲此我想,以解決不同的控制器。

事件名稱始終是唯一的,但頁面不是。

+0

我有一個答案,如果它還沒有解決的建議 –

+0

我很想聽到它 – McAn

+0

他不能只驗證他在該塊內驗證,然後手動調用控制器? – Gokigooooks

回答

0

您可以在路徑封閉內手動調用控制器。雖然我會建議在助手文件中進行驗證,以使路徑文件清晰可讀。

Route::group(['middleware' => ['sal', 'menu']], function() { 

    Route::get('/{event}/{page}', function($event, $page) { 
     // you could do something like 
     $user_type = Auth::user()->user_type; 
     if($user_type == "organizer") 
     { 

      $controller = $app->make('OrganizerController'); 
      return $controller->callAction('controllerFunc', $parameters = array());   
     } 
     else 
     { 
      $controller = $app->make('ClientController'); 
      return $controller->callAction('controllerFunc', $parameters = array());   
     }   

    }); 
}); 
+0

當我在RouteServiceProvider中創建路由時,我無法訪問「Auth :: user()」 – Carlton

0

到路由溶液的另一種可能是在處理控制器本身的邏輯:

首先,更新routes.php到類似:

Route::group(['middleware' => ['sal', 'menu']], function() { 
    Route::get('/{event}/{page}', '[email protected]'); 
}); 

然後,在RoutesController.php文件(加到app/Http/Controllers),你可以做類似於:

public function index() 
{ 
    $event = Request::segment(1); // get the {event} part of the route 
    $page = Request::segment(2); // get the {page} part of the route 

    // get event data from database, e.g. 
    $event_data = Event::where('slug', $event)->first(); 

    // load correct page 
    switch ($page) { 
     case "people": 
      return $this->people(); 
     break; 
     case "anotherPage": 
      return $this->another_page(); 
     break; 
    } 
} 

private function people() 
{ 
    // show view 
    return View::make('event.people'); 
} 

該解決方案可以保持路由文件的清潔,還可以讓您處理不同的事件和頁面數據,並根據查看的頁面加載不同的視圖。你的額外邏輯在控制器而不是路由文件中會更好。

這一切都取決於您希望在哪裏編碼頁面/視圖邏輯。您可以在同一個控制器或外部控制器中使用此方法調用函數。

+0

我認爲這不是一個糟糕的方法,但我確實喜歡保持路由邏輯的想法(除非它太亂了)在routes.php中。 – McAn