Wild Alaskan Company Routing Assignment

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

Step 1

Given a routes file say routes.php

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.

Step 2 Detect and support HTTP verbs automatically

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.

Verb Method
get (with parameter) show
get / index
post store
put update
delete destroy

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 the method show($id) where $id is 123

Another example: a url call of GET /users/bob/posts/999 should execute show($name, $id) where $name should evaluate to bob and $id should evaluate to 999

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