You are familar with the Laravel router code no doubt. What we want is to implement from scratch, a simplified version of Laravel’s “resource router”
Given a routes file say
We want to be able to declare resources routes.
Resource routes will automatically pick up the
HTTP verb from the web request and execute the corresponding functions in a controller that matches the route name.
For all supported
HTTP verbs, implement the corresponding execution of the controller method.
For example a verb of
GET will execute the controller method
show. Here is a table of the all the verbs we want to support. If a controller or method does not exist, then throw an exception.
|get (with parameter)||show|
Here is an example of a
routes.php file for a hypothetical blog application
Route::resource('posts'); Route::resource('users.posts'); Route::resource('categories.posts');
For simplicity, the controller will have to be named based on the route parameter. So for the above example we expect these controllers.
PostsController.php UsersPostsController.php CategoriesPostsController.php
We will not support custom controller names.
Furthermore, the parameters in the route url should be passed to the controller methods.
In the above example a url call of
GET /posts/123 should execute
Another example: a url call of
show($name, $id) where
$name should evaluate to
$id should evaluate to
There is no need to handle any query strings or the actual request payload in a post or put. We only want to see the execution of the controller methods.
Bonus: package into a standalone composer library
Extra Bonus: Run this inside a docker container