heropoo / routing by heropoo

A routing use "symfony/routing" and like "laravel/routing" style
5,608
10
1
Package Data
Maintainer Username: heropoo
Maintainer Contact: aiyouyou1000@163.com (Heropoo)
Package Create Date: 2017-08-08
Package Last Update: 2022-06-30
Home Page:
Language: PHP
License: MIT
Last Refreshed: 2024-05-18 15:06:58
Package Statistics
Total Downloads: 5,608
Monthly Downloads: 8
Daily Downloads: 0
Total Stars: 10
Total Watchers: 1
Total Forks: 4
Total Open Issues: 0

routing

A routing use "symfony/routing" and like "laravel/routing" style

To install it via composer

composer require heropoo/routing

example:

<?php
require '../vendor/autoload.php';

use Moon\Routing\Router;


$router = new Router(null, [
    'namespace'=>'app\\controllers',    //support controller namespace
    'middleware'=>[                     //support middleware
        'startSession',
        'verifyCSRFToken',
        'auth'
    ],
    'prefix'=>''                        //support prefix
]);

// action also can be a Closure
$router->get('/', function(){
    return 'Welcome \( ^▽^ )/';
});

//route parameter
$router->get('/hello/{name}', function($name){
    return 'Hello '.$name;
})->setRequirement('name', '([\w\s\x{4e00}-\x{9fa5}]+)?');  //  Perform a regular expression match

$router->get('/login', 'UserController::login')->name('login'); // name your route
$router->post('/login', 'UserController::post_login');

//use route group 
$router->group(['prefix'=>'user'], function($router){
    /**
     * @var Router $router
     */
    $router->post('delete/{id}', 'UserController::delete');
});

// match GET or POST request method 
$router->match(['get', 'post'], '/api', 'ApiController::index');

// match all request method
$router->any('/other', 'ApiController::other');

echo '<pre>';
var_dump($router->getRoutes());


/**
 * match request
 */
$request = \Symfony\Component\HttpFoundation\Request::createFromGlobals();

$path_info = $request->getPathInfo();

echo '<hr>'.$path_info.'<hr>';

$context = new \Symfony\Component\Routing\RequestContext();
$context->fromRequest($request);

//match
$matcher = new \Symfony\Component\Routing\Matcher\UrlMatcher($routes, $context);
$parameters = $matcher->match($path_info);

//match request
var_dump($parameters);

Now use matched result to handle your controller's method or Closure! \( ^▽^ )/