Преглед изворни кода

Basic setup of the example of usage for the new package

Herton пре 4 година
комит
d749025e73
8 измењених фајлова са 136 додато и 0 уклоњено
  1. 4 0
      .gitignore
  2. 17 0
      Dockerfile
  3. 22 0
      composer.json
  4. 14 0
      docker-compose.yml
  5. 11 0
      index.php
  6. 64 0
      readme.md
  7. 3 0
      routes.php
  8. 1 0
      serve.sh

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
+composer.lock
+vendor
+packages
+.DS_Store

+ 17 - 0
Dockerfile

@@ -0,0 +1,17 @@
+FROM php:7.4-cli
+
+RUN apt-get update
+RUN apt-get install -y git libzip-dev zip
+
+RUN docker-php-ext-install zip
+
+# Get latest Composer
+COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
+
+COPY . /example
+WORKDIR /example
+
+# install the dependencies
+RUN composer install -o --prefer-dist
+
+CMD php -S localhost:8000 -t example

+ 22 - 0
composer.json

@@ -0,0 +1,22 @@
+{
+    "name": "hd/router-example",
+    "description": "Example functionality for the simple resource router",
+    "type": "project",
+    "authors": [
+        {
+            "name": "Herton",
+            "email": "hd@goodquestion.dev"
+        }
+    ],
+    "repositories": [
+        {
+            "type": "path",
+            "url": "./packages/goodquestiondev/simple-router-resource",
+            "symlink": true
+        }
+    ],
+    "require": {
+        "goodquestiondev/simple-router-resource": "dev-master",
+        "symfony/http-foundation": "^5.1"
+    }
+}

+ 14 - 0
docker-compose.yml

@@ -0,0 +1,14 @@
+version: "2"
+
+services:
+  web:
+    build: .
+    working_dir: ./
+    environment:
+      APP_ENV: local
+      XDEBUG_CONFIG: remote_enable=1
+      PHP_IDE_CONFIG: serverName=localhost
+    ports:
+      - 3000:8000
+    volumes:
+      - .:/app:rw

+ 11 - 0
index.php

@@ -0,0 +1,11 @@
+<?php
+
+/*
+* Register The Auto Loader
+*/
+require_once __DIR__ . '/vendor/autoload.php';
+
+/*
+* Register The Auto Loader
+*/
+require_once __DIR__ . '/routes.php';

+ 64 - 0
readme.md

@@ -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

+ 3 - 0
routes.php

@@ -0,0 +1,3 @@
+<?php
+
+echo 'hi';

+ 1 - 0
serve.sh

@@ -0,0 +1 @@
+php -S localhost:8000 -t ./