Hallo,Mehrere Route Argument Muster in einer Route in Laravel 5.2
für Start, ich habe wirklich versucht, dies zu Google. Es scheint jedoch unmöglich zu sein, ein Routenargumentmuster mehr als einmal in einer Route zu verwenden. Mein Ziel ist eine Argumentvalidierung in der Routendefinition für Routen wie/resource/{uuid}/subresource/{uuid}, ohne diese Argumente manuell im Controller überprüfen zu müssen.
Nehmen wir an, wir haben:
$router->pattern('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}');
funktioniert perfekt für Routen wie
$router->get('/payment/{uuid}', '[email protected]');
$router->get('/users/{uuid}', '[email protected]');
//etc..
ABER
$router->get('/users/{uuid}/order/{uuid}', '[email protected]');
wirft einen Fehler:
"Route pattern "https://stackoverflow.com/users/{uuid}/order/{uuid}" cannot reference variable name "uuid" more than once."
Scheint echt. Aber ich möchte nur Argumente bestätigen durch regex DRY und andere Ansätze wie unten nicht funktionieren:
$router->get('/users/{userId}/order/{orderId}', '[email protected]')
->where(['userId' => 'uuid', 'orderId' => 'uuid']);
// or
$router->get('/users/{userId:uuid}/order/{orderId:uuid}', '[email protected]');
// ..and vice versa
Das einzige, was funktioniert, ist dies:
$router->get('/users/{userId}/order/{orderId}', '[email protected]')
->where(['userId' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}', 'orderId' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}']);
... aber ich weiß nicht wirklich Ich möchte diesen Weg gehen. Das ist tatsächlich die einzige Art, wie es funktioniert hat.
Kennt jemand einen Trick, wie man mehrfache Wegargumentmuster anwendet?
Danke, wäre jede Hilfe geschätzt ...
Vielen Dank für Ihre Antwort. Eigentlich habe ich die Musterdefinition innerhalb der 'Router :: boot'-Methode. Und ja, das ist auch ein Weg. Aber stellen Sie sich vor, dass API Dutzende von Endpunkten haben wird und Sie kein Uuid-Muster für jede " Id" definieren wollen. Der Weg könnte etwas wie die Definition von 'resrouceId' und 'subresourceId' als Uuids sein, aber ich fühle immer noch, dass etwas mit dem Universum nicht stimmt. Ich werde wahrscheinlich eine Frage/Feature-Anfrage öffnen und Sie wissen lassen. –
rudolfdobias
Ich denke, du hast Recht, es hat mich auch denken lassen, und ich würde in PR einreichen, um benannte Parametermuster zu erlauben. Ich hatte genau dieses Problem in einer API, die ich gebaut habe, die UUIDs für viele Ressourcen verwendet. – edcs
Eröffnet ein [Problem] (https://github.com/laravel/framework/issues/13442) .. wir werden sehen – rudolfdobias