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)