laravel万能路由( 自动路由、动态路由)实现方法分享

laravel万能路由 自动路由 动态路由

有了万能路由就不用一条一条添加路由了,很方便。如果你要用资源控制器做Restful接口,那还是要写资源路由的,注意,资源路由一定要写在最上面。

Route::resource('photos', 'PhotoController');//资源路由要写在上面。

//万能路由

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]+']);

});

在你的控制器方法中获取参数要用(Request $request)

public function index(Request $request)
    {
        $name = $request->input('name');
        echo $name;
    }

友好url:如果你想拥有http://www.laravel65.com/Haha/photo/index/id/22/tag/php  这样的友好url

请使用以下

Route::resource('photos', 'PhotoController');//资源路由要写在上面。
Route::get('/', function () {
    return view('welcome');
});
//万能路由
Route::group(['middleware'=>['web']],function (){
    Route::any("/{search}",function ($search){
        $urls=explode('/',$search);
        $module=$urls[0] ?? 'Index';
        $className=$urls[1] ?? 'Index';
        $action=$urls[2] ?? 'Index';
        $class ="App\\Http\\Controllers\\$module\\".ucfirst(strtolower($className)).'Controller';
         
            $ctrl = \App::make($class);
                return \App::call([$ctrl, $action],[$search]);
        // }
        return abort(404);
 
    })->where('search', '.*');
});

同时在你控制器的方法中使用$search参数接收参数

public function index(Request $request,$search)
    {
        var_dump($search);
        $name = $request->input('id');
        echo 'index' .$name;
    }

 

原创文章,转载请注明:来自lenix的博客,地址https://blog.p2hp.com/archives/7504

laravel万能路由( 自动路由、动态路由)实现方法分享
标签: