Je veux savoir s'il est possible d'ajouter de nouvelles méthodes à un contrôleur de ressources dans Laravel et comment vous le faites.
Je sais que ces méthodes sont les méthodes par défaut (indexer, créer, stocker, modifier, mettre à jour, détruire). Maintenant, je veux ajouter des méthodes et des routes supplémentaires au même contrôleur.
Est-ce possible?
::resource
sinon vous obtenez un message d'erreur, "Aucun résultat de requête pour le modèle".Route::get('foo/{id}', ...)
. Cela avale tous les itinéraires commençant parfoo
et ayant un segment supplémentaire, y comprisfoo/bar
.Je viens de faire cela, pour ajouter une méthode GET "delete".
Après avoir créé vos fichiers, il vous suffit d'ajouter
aux 'fournisseurs' dans votre application / config.php
Modifiez l'alias d'itinéraire dans ce même fichier:
le changer en
Et assurez-vous que ces fichiers sont en cours de chargement automatique, ils doivent être dans un répertoire que vous avez dans votre composer.json (section "autoload").
Ensuite, il vous suffit de:
Et ceci (regardez la dernière ligne) est le résultat si vous exécutez
php artisan routes
:Ce sont mes fichiers source:
ExtendedRouteFacade.pas
ExtendedRouter.pas
ExtendedRouteServiceProvider.pas
la source
Ouais, c'est possible ...
Dans mon cas, j'ajoute method: data pour gérer la demande de /data.json dans la méthode HTTP POST.
C'est ce que j'ai fait.
Nous étendons d'abord Illuminate \ Routing \ ResourceRegistrar pour ajouter de nouvelles données de méthode
Après cela, créez votre nouveau ServiceProvider ou utilisez plutôt AppServiceProvider .
Dans le démarrage de la méthode , ajoutez ce code:
puis :
ajouter à votre itinéraire:
Check by
php artisan route:list
Et vous trouverez une nouvelle méthode 'data'la source
Essayez ceci. Mettez-vous des méthodes supplémentaires comme getData (), etc. Cela a fonctionné pour moi pour garder route.php propre
la source
Utilisation de Laravel> 5 Recherchez le fichier web.php dans le dossier routes ajoutez vos méthodes
Vous pouvez utiliser route :: resource pour router toutes ces méthodes index, show, store, update, destroy dans votre contrôleur en une seule ligne
la source
Ajoutez simplement une nouvelle méthode et une route vers cette méthode.
Dans votre contrôleur:
Et dans vos routes web
Assurez-vous simplement que la méthode du contrôleur est publique.
la source
précédemment j'ai défini mon itinéraire comme
Route :: get ('foo / bar', 'FooController @ bar');
Route :: resource ('foo', 'FooController');
cela a donné une erreur: la route foo.bar n'est pas définie
et après quelques recherches sur Google, j'ai ajouté le nom
Route :: get ('foo / bar', 'FooController @ bar') -> nom ('foo.bar');
et cela a bien fonctionné.
la source
Cela fonctionne très bien aussi. Pas besoin d'ajouter plus de routes, utilisez simplement la méthode show du contrôleur de ressources comme ceci:
J'utilise la valeur par défaut pour lancer une page d'erreur personnalisée.
la source