2016-03-24 9 views
0

私はlaravelを初めて使っています。私は自分の問題に対する答えをたくさん探してきましたが、それは適用できないか、ララベルシングルルートは、ナメクジに応じて異なるコントローラを指します

顧客とイベントを処理するクライアント用のFileMakerソリューションがあります。私のクライアントの各顧客は、ソリューションを介して管理される独自のイベントWebサイトを持っています。単純にCMS。各顧客はclientsite.com/eventのようなURLを持つサイトを取得します。

イベントの各ページにはページタイプがあり、タイプに応じて異なるコントローラに対応したいと思います。 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

彼はそのブロック内のhesの検証を行った後、コントローラを手動で呼び出すことはできませんか? – 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

関連する問題