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万能路由( 自动路由、动态路由)实现方法分享