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

dafenqi
2023-08-11 / 0 评论 / 10 阅读 / 正在检测是否收录...

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;
}
0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消