怎么实现laravel类似的路由监听机制?

我们看到laravel的官方路由是这样写的:

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

看起来相当优雅,最关键的是这种方式能够监听REQUEST_URI,那我也来实现一个。

具体如下:

   public static function get( $rules, $callback ){
        if ( $_SERVER['REQUEST_METHOD'] !== strtoupper( __FUNCTION__ ) ) {
            exit('非法请求!');
        }
        $uri = trim( $_SERVER['REQUEST_URI'], '/' );
        preg_match( '/^' . $rules . '/', $uri, $matches);
        if ( isset( $matches[1] ) && is_numeric( $matches[1] ) ) {
            $callback( $matches[1] );
        }else{
            $router = new self();
            $router->go();
        }
    }

调用方式如下:

Router::get( 'user\/(\d+)', function( $ID ){
    include( CTLPATH . DS . 'UserController.php' );
    $user = new UserController();
    call_user_func( [ $user, 'user' ], $ID );
} );

实现关键点是什么?

这个两个函数使用的关键点查看官网就明白了。

作者: 曾小乱

喜欢写点有意思的东西

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据