web-dev-qa-db-fra.com

Laravel 5.6 paramètres Route :: resource () supplémentaires

Je voudrais savoir comment ajouter des paramètres supplémentaires à la ressource Route de Laravel sans utiliser les chaînes de requête.

J'ai créé un contrôleur (CustomerController) avec toutes les ressources intégrées, puis j'ai ajouté l'itinéraire suivant:

Route::resource('customers', 'CustomerController');

Ce que je voudrais faire, c'est ajouter des paramètres supplémentaires à certaines des ressources par défaut sans créer de routes personnalisées ni utiliser de chaînes de requête. Par exemple:

Ressource par défaut avec paramètre facultatif (index):

public function index($page = 0)
{
    //...
}

URL souhaitée:

http://www.example.com/customers
http://www.example.com/customers/{page}

J'ai essayé ce qui suit, mais j'obtiens une exception introuvable (NotFoundHttpException):

Route::resource('customers', 'CustomerController')->parameters([
    'index' => 'page'
]);

Est-ce possible? Si oui, comment puis-je y parvenir?

7
Ricky

Les contrôleurs de ressources doivent implémenter un ensemble défini de méthodes qui sont ensuite mappées au verbe et au chemin HTTP appropriés par le routeur. Ces méthodes, chemins et verbes font partie d'un contrat qui ne peut pas être ajusté, sinon travailler avec une application Laravel qui implémente les contrôleurs de ressources serait un casse-tête.

Les contrôleurs de ressources Excel offrent la même expérience dans toutes les applications Laravel, si votre application nécessite un comportement non pris en charge par les contrôleurs de ressources, c'est un signe que vous ne devez pas utiliser et devrait plutôt enregistrer vos itinéraires manuellement.

Si vous n'avez qu'un seul itinéraire qui doit implémenter un comportement personnalisé, vous pouvez enregistrer certaines méthodes au lieu de toutes, puis choisir d'enregistrer un itinéraire personnalisé vers votre ressource Méthode des contrôleurs, quelque chose comme:

Route::resource('customers', 'CustomerController')->except([
    'index'
]);

Route::get('/customers/{page?}', 'CustomerController@index');

La documentation sur Contrôleurs de ressources couvre except et only.

11
sam