2017 © Pedro Peláez
 

library conveyor

PHP router, support simple route group function.

image

ween/conveyor

PHP router, support simple route group function.

  • Tuesday, February 6, 2018
  • by arnoluo
  • Repository
  • 1 Watchers
  • 0 Stars
  • 6 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Conveyor

Intro

Conveyor is a PHP router, supports route group function., (*1)

Features:, (*2)

Register available uri-prefix, class namespace and middleware initially;, (*3)

Set different route prefix and namespace in each route group;, (*4)

Set simple middlewares for every route., (*5)

Install

If you have Composer, just include as a project dependency in your composer.json. If you don't just install it by downloading the .ZIP file and extracting it to your project directory., (*6)

require: {
    "ween/conveyor": "dev-master"
}

Or command line:, (*7)

composer require ween/conveyor

Usage

First, use the Route namespace:

use Conveyor\Route;

Second, write routes(writing style just like Laravel):

Basic:

Route::get('/', function() {
    return 'GET request';
});

Route::post('/', function() {
    return 'POST request';
});

Route::any('/', function() {
    return 'both GET and POST request';
});

Route::get('/', 'DemoControllers@method');

Last, dispatch or just capture request:

single usage:
// Will dispatch routes, run the middlewares and finally call the matched method
Route::dispatch();
usage in container:
// Capture the matched array, which include class names of all middlewares and the matched method 
Route::capture();

You can also use regex in Route, three can be recognized now:

Route::get('/a/(:all)b/ab', function() {
    return 'I can receive all request uri like /a/abcb/ab, /a/123b/ab, /a/b/c/db/ab';
});

Route::get('/a/(:any)b/ab', function() {
    return 'I can receive all request uri like /a/ab/ab, /a/4b/ab, /a/a4b/ab';
});

Route::get('/a/(:num)b/ab', function() {
    return 'I can receive all request uri like /a/0123456789b/ab';
});

Route group function:

/**
 * $params recognize three keywords now:
 * $params['prefix'] set a prefix uri for current group;
 * $params['namespace'] set the namespace for current group, so that class can be autoloaded with PSR-4;
 * $params['middleware'] set some registered middlewares before call final function.
 */
Route::group(array $params, closure $callback);
Route::group(['prefix' => '/user', 'namespace' => 'App\\Controller\\'], function() {

    Route::group(['prefix' => '/sub1', 'namespace' => 'Bpp\\Controller\\', 'middleware' => 'foo, bar'], function() {

        Route::get('/', function() {
            return 'I can receive uri like /user/sub1';
        });

        // Request /user/sub1/abc will load class DemoController in namespace Bpp\\Controller\\
        // Middleware will not work because no registered middleware exist.
        Route::get('/abc', 'DemoController@method');
    });

    Route::group(['prefix' => '/sub2'], function() {

        Route::get('/', function() {
            return 'I can receive uri like /user/sub2/';
        });

        Route::get('/a(:all)', function() {
            return 'I can receive all request uri start with /user/sub2/a';
        });
    });

});

If you do not need middleware function, the above codes are enough. If not, please read the Extension below., (*8)

Extension

There are some useful functions provided by Conveyor:, (*9)

Registe some common properties:, (*10)

register need be called before writing router., (*11)

Route::register([
    'prefix' => '',
    'namespace' => 'App\\Controllers\\',
    'alias' => [
        // Middleware path array
        // 'alias' => \Namespace\Class::class;
        'abc' => \Foo\Bar\FB::class,
        'home' => \App\Middlewares\HomeMiddleware::class,
    ],
    // Just registered alias are valid; 
    'middleware' => 'abc, home'
]);

Rewrite 404 notice when route dispatch failed:, (*12)

Route::error(function() {
  return '404 :: Not Found';
});

Set some middlewares for a single route:, (*13)

Route::get('abc', 'HomeController@demo')->middleware('foo, bar');

Example for middleware:

yourRoute.php:, (*14)

<?php

use Conveyor\Route;

Route::register([
    'namespace' => 'App\\Controllers\\',
    'alias' => [
        'home' => \App\Middlewares\HomeMiddleware::class,
    ]
]);

// some routes...

Route::get('abc', 'HomeController@demo')->middleware('home');

HomeMiddleware.php, (*15)

Conveyor will run middleware as HomeMiddleware->handle(); So every middleware need a handle() method., (*16)

<?php

namespace App\Middlewares;

class HomeMiddleware
{
    public function handle()
    {
        // $result = 'result of your milldeware validation';
        if ($result) {
            // if validate success, just return true
            return true;
        } else {
            // if failed ,please give a response array
            // [some fields...]
            return ['result' => 'error', 'msg' => 'error message'];
        }
    }
}

The Versions

06/02 2018

dev-master

9999999-dev https://github.com/arnoluo/conveyor

PHP router, support simple route group function.

  Sources   Download

MIT

The Requires

  • php >=5.3.3

 

php router php-router

11/01 2018

dev-render-response-simply

dev-render-response-simply https://github.com/arnoluo/conveyor

PHP router, support simple route group function.

  Sources   Download

MIT

The Requires

  • php >=5.3.3

 

php router php-router

27/12 2017

dev-readme-modify

dev-readme-modify https://github.com/arnoluo/conveyor

PHP router, support simple route group function.

  Sources   Download

MIT

The Requires

  • php >=5.3.3

 

php router php-router