Laravel 万能路由的写法

TP 的规则

Route::group(['middleware'=>['web']],function (){
    Route::any('/{$module}/{controller}/{action}',function ($module,$class,$action){
        $class = 'App\\Http\\Controllers\\.$module.\\'.ucfirst(strtolower($class)).'Controller';
        if(class_exists($class))
        {
            $ctrl = \App::make($class);
                return \App::call([$ctrl, $action]);
        }
        return abort(404);
 
    })->where([ 'module'=>'[0-9a-zA-Z]+',class' => '[0-9a-zA-Z]+', 'action' => '[0-9a-zA-Z]+']);
});

Laravel 路由,只需定义一次以后模块化,无需每次写方法写控制器都要写一遍路由,RSTful API

Route::pattern('version_id', '[0-9]+');
Route::group(['prefix'=>'v{version_id}'],function ($router){
    $router->any('/{module}/{controller?}/{action?}/{id?}',function() use ($router){
        $version='V'.Route::input('version_id');
        $module=Route::input('module');
        $controller=Route::input('controller');
        $action=Route::input('action');
        $id=Route::input('id');
        if(Route::has($controller)){
            return redirect($controller);
        }else{
            $realcontroller="App\\Http\\ApiControllers\\".$version.'\\'.ucwords($module)."\\".ucwords($controller)."Controller";
            if (!class_exists($realcontroller)){
                return view('error.404');
            }else{
                $ctrl = \App::make($realcontroller);
                if(method_exists($ctrl,$action)){
                    return \App::call([$ctrl, $action],['id'=>$id]);
                }elseif(method_exists($ctrl,$id)){
                    return \App::call([$ctrl, $id],['action'=>$action]);
                }else{
                    $data=$_REQUEST;
                    $data['id']=$id;
                    $data['action']=$action;
                    return \App::call([$ctrl, 'undefined'],['data'=>$data]);
                }
            }
        }
    });
});


如您有新项目的需求,加微信索取更多相关案例介绍!