|
@@ -1,36 +1,6 @@
|
|
|
-### 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
|
|
|
+### Exmple Routes
|
|
|
|
|
|
```
|
|
|
Route::resource('posts');
|
|
@@ -38,27 +8,15 @@ 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.
|
|
|
-
|
|
|
+### Exmple Controllers available
|
|
|
|
|
|
```
|
|
|
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
|
|
|
+### To run the example:
|
|
|
+1. Pull the repository locally `https://git.hersidea.com/herton/wild-alaskan`
|
|
|
+2. Run `composer install`
|
|
|
+3. Run the server script `./serve.sh`
|