我们看到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 ); } );
实现关键点是什么?
这个两个函数使用的关键点查看官网就明白了。