web-dev-qa-db-fra.com

Laravel (5) - Routage vers le contrôleur avec des paramètres facultatifs

J'aimerais créer un itinéraire qui prend un ID requis, ainsi que des dates de début et de fin facultatives ("Ymd"). Si les dates sont omises, elles retombent sur une valeur par défaut. (Dites les 30 derniers jours) et appelez un contrôleur .... disons 'path @ index'

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 'path@index' with $id, $start, and $end?
});

Toute aide serait appréciée. Je suis sûr qu'il existe une réponse simple, mais je n'ai rien trouvé nulle part.

Merci d'avance pour l'aide!

29
Steve

Il n'y a aucun moyen d'appeler un contrôleur à partir d'une fermeture Route:::get.

Utilisez Route::get('/path/{id}/{start?}/{end?}', 'Controller@index'); et gérez les paramètres dans la fonction du contrôleur:

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

    if (!$end) {
        // set end
    }

    // do other stuff
}
71
Michael Pittino

Je voudrais le manipuler avec trois chemins:

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

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

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

Notez l'ordre - vous voulez que le chemin complet soit vérifié en premier.

2
Lea de Groot

Vous pouvez appeler une action de contrôleur à partir d'une fermeture de route comme ceci:

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;

});
1
Alex

Ce que j'ai fait a été de définir les paramètres facultatifs comme requête paramètres comme suit:

Exemple d'URL: /getStuff/2019-08-27?type=0&color=red

Route: Route::get('/getStuff/{date}','Stuff\StuffController@getStuff');

Manette:

public function getStuff($date)
{
        // Optional parameters
        $type = Input::get("type");
        $color = Input::get("color");
}
0
Cutedu