2015-04-28 9 views
10

Vorrei creare un percorso che richiede un ID richiesto e date di inizio e fine opzionali ('Ymd'). Se le date sono omesse, ritornano a un valore predefinito. (Dire ultimi 30 giorni) e chiamare un controller .... diciamo 'path @ index'Laravel (5) - Routing al controller con parametri opzionali

Route::get('/path/{id}/{start?}/{end?}', function($id, $start=null, $end=null) 
{ 
    if(!$start) 
    { 
     //set start 
    } 
    if(!$end) 
    { 
     //set end 
    } 

    // What is the syntax that goes here to call '[email protected]' with $id, $start, and $end? 
}); 

Qualsiasi aiuto sarebbe apprezzato. Sono sicuro che c'è una risposta semplice, ma non ho trovato nulla da nessuna parte.

Grazie in anticipo per l'aiuto!

risposta

29

Non c'è modo di chiamare un controller da una chiusura Route::get.

Usa Route::get('/path/{id}/{start?}/{end?}', '[email protected]'); e gestire i parametri nella funzione del controller:

public function index($id, $start = null, $end = null) 
{ 
    if (!start) 
     // set start 

    if (!end) 
     // set end 

    // do other stuff 
} 
+0

Se uno dei due parametri viene inviato, sarà impostato su $ start poiché quello era il primo definito nel percorso? – user985366

+0

L'articolo spiega i parametri del percorso facoltativi e obbligatori con output campione http://www.devtrainings.com/2016/04/laravel-how-to-get-route-parameters-in-controller.html –

+0

Grazie @MichalPittino! +1 –

0

avrei maneggiarlo con tre percorsi:

percorso :: get ('/ percorso/{id}/{start} /{fine}, ...);

Route :: get ('/ percorso/{id}/{start}, ...);

Route :: get ('/ percorso/{id}, ...);

nota dell'ordine - si desidera che il percorso completo controllato per primo

1

È possibile chiamare un azione di controllo da una chiusura percorso come questo:

Route::get('{slug}', function ($slug, Request $request) { 

    $app = app(); 
    $locale = $app->getLocale(); 

    // search for an offer with the given slug 
    $offer = \App\Offer::whereTranslation('slug', $slug, $locale)->first(); 
    if($offer) { 
     $controller = $app->make(\App\Http\Controllers\OfferController::class); 
     return $controller->callAction('show', [$offer, $campaign = NULL]); 
    } else { 
     // if no offer is found, search for a campaign with the given slug 
     $campaign = \App\Campaign::whereTranslation('slug', $slug, $locale)->first(); 
     if($campaign) { 
      $controller = $app->make(\App\Http\Controllers\CampaignController::class); 
      return $controller->callAction('show', [$campaign]); 
     } 
    } 

    throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

});