|
@@ -0,0 +1,64 @@
|
|
|
+### 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".
|
|
|
+
|
|
|
+https://laravel.com/docs/5.8/controllers#resource-controllers
|
|
|
+
|
|
|
+### 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
|