psf1/router_matcher

URL router patterns tool

v1.0.1 2020-09-22 10:12 UTC

This package is auto-updated.

Last update: 2024-05-22 18:42:05 UTC


README

URL router patterns tool

This library allows to create local URL responses, for example, to use in unit tests.

Install:

composer require 'psf1/router-matcher'

How to use:

<?php

use Psf1\RouterMatcher\RouterMatcher;

class myServer {
    
  /**
   * Router matcher.
   *
   * @var \Psf1\RouterMatcher\RouterMatcher
   */
  protected $routerMatcher;

  /**
   * Creates a myServer instance.
   */
  public function __construct() {
    // Create the matcher.
    $this->routerMatcher = new RouterMatcher();
    // Add new routes. If we need a subfolder where the second
    // can have dynamic values, it must be declared after the 
    // fixed one.
    // The same with other levels.
    $this->routerMatcher->addRoute('/example');
    // To declare a dynamic value you must enclose it with '{}'.
    $this->routerMatcher->addRoute('/entity/level2/{session_key}');
    $this->routerMatcher->addRoute('/entity/{session_key}');
    $this->routerMatcher->addRoute('/other-entity/list');
    $this->routerMatcher->addRoute('/other-entity/{id}/childs');
  }

  /**
   * Helper function to simulate send a request with JSON data.
   *
   * @param string $method
   *   HTTP method.
   * @param string $url
   *   Request URL.
   * @param array $request_data
   *   Request data.
   *
   * @return array
   *   Response data.
   */
   public function request($method, $url, array $request_data) {
     $response = [];
     $path = parse_url($url, PHP_URL_PATH);
     switch ($path) {
       case $this->routerMatcher->isMatch('/example', $path):
         switch ($method) {
           case 'POST':
             $response = [
                'http_code' => 200,
                'data' => '/example POST response',
             ];
           break;

           case 'GET':
             $response = [
               'http_code' => 200,
               'data' => '/example GET response',
             ];
           break;
        }
        break;
    
       case $this->routerMatcher->isMatch('/entity/{session_key}', $path):
         // Get URL parameters.
         $parameters = $this->routerMatcher->parseRoute($path);
         $response = [
            'http_code' => 200,
            'data' => '/entity/{session_key} response',
            'parameters' => $parameters,
         ];
       break;
       
       case $this->routerMatcher->isMatch('/entity/level2/{session_key}', $path):
       case $this->routerMatcher->isMatch('/other-entity/list', $path):
       case $this->routerMatcher->isMatch('/other-entity/{id}/childs', $path):
         // Get URL parameters.
         $parameters = $this->routerMatcher->parseRoute($path);
         $response = [
            'http_code' => 200,
            'data' => 'Other response',
            'parameters' => $parameters,
         ];
       break;

       default:
         $response = [
           'http_code' => 404,
           'data' => 'URL not found.'
         ];
       break;
     }
     return $response;
   }

}