Slim wildcard routes : Last but not least
This is a follow up to Slim wildcard routes improved... you may want to go and read that first.
With the release of Slim 1.6.5, route wildcard parameters are now officially part of the framework. Lets take at look at our past example and improve it again to use the baked in feature. As a reminder the example URIs we want to parse into the array are:
http://hostname/api/getitems/seafood/fruit/meat
http://hostname/api/getitems/seafood
http://hostname/api/getitems/seafood/fruit/apples/bananas/chocolate
To indicate a route wildcard parameter we simply add a +
after the name of the parameter, /api/getitems/:items+
. We can now specify our route as follows:
$app->get('/api/getitems/:items+', function ($items) {
var_dump($items);
});
The output is printed as before for the three urls from above:
array(3) { [0]=> string(7) "seafood" [1]=> string(5) "fruit" [2]=> string(4) "meat" }
array(1) { [0]=> string(7) "seafood" }
array(5) { [0]=> string(7) "seafood" [1]=> string(5) "fruit" [2]=> string(6) "apples" [3]=> string(7) "bananas" [4]=> string(9) "chocolate" }
I'll finish off with something you might be wondering. You can specify additional parameters after the wildcard. The only gotcha here is that they can't be optional or the wildcard will gobble them all up and always leave the optional as the default value. I would describe this as expected behaviour.
$app->get('/api/getitems/:items+/:name', function ($items, $name) {
var_dump($items);
var_dump($name);
});
The above route will not match http://hostname/api/getitems/fruit
but will match http://hostname/api/getitems/fruit/brian
and http://hostname/api/getitems/seafood/fruit/meat/brian
.