|
před 4 roky | |
---|---|---|
Controllers | před 4 roky | |
tests | před 4 roky | |
.gitignore | před 4 roky | |
Application.php | před 4 roky | |
Dockerfile | před 4 roky | |
Helpers.php | před 4 roky | |
Resource.php | před 4 roky | |
Route.php | před 4 roky | |
composer.json | před 4 roky | |
docker-compose.yml | před 4 roky | |
handle.php | před 4 roky | |
index.php | před 4 roky | |
readme.md | před 4 roky | |
routes.php | před 4 roky | |
serve.sh | před 4 roky |
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
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.
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