路由
- laravel强路由框架,根据querystring进行回调匹配,可以将模块/路由器/方法简化成一个标识
/**
* 在routes下的web进行配置
* Route::路由方法(路由标识,路由地址)
*/
Route::get('base',function(){
return ‘hello world’; //这里的return会打印到页面上
});
//多方法匹配
Route::match(['get','post'],'match',function(){
return 'match';
});
//任意一种访问方法
Route::any('any',function(){
return 'any';
});
- 路由方法包含get post put patch delete options
- 除get外其他方法访问,默认会报419,是由于中间件作用导致
- 在Http、Middleware下进行中间件配置
- 在http->kenel.php进行注册,去除verifyCsrfToken后post访问就不会报错了
- 也可以在http middleware VerifyCsrfToken.php中在except中添加post进行排除
- 如果存在两个相同的路由定义,会走最后一个,不会报错,如果路由方法定义的不同,则视为两个不同的路由规则,如果uri的可选参数不同,也是两条不同路由
- Route::get('base/{id?}',function(){})
- Route::get('base/{id?}/{name?}',function(){}) 这是两个路由规则 ip/base/1只会访问匹配第一条
- 动态路由
Route::any('/con/{con}/{method}',function ($class,$method){
//return redirect()->action($con.'@'.$method);
//自动路由
$class = "App\\Http\\Controllers\\".ucfirst(strtolower($class));
if(class_exists($class)) {
$ctrl = \App::make($class);
return \App::call([$ctrl, $method]);
}
abort(404);
});
路由参数
//ip/base/123,
Route::get('base/{uid}',function($id){
return id为$id; //根据位置传参,而不是名字
});
//可循参数, 括号内加?,参数最好增加默认值
Route::get('base/{uid?}',function($id=0){
return id为$id; //根据位置传参,而不是名字
});
//路由正则,对路由参数进行限制
Route::get('regex/{name}',function(){})->where('name','[a-z]+'); //where 参数一为对那个参数进行限制,参数二为正则
- 全局约束
- 对所有的参数进行一个过滤,需要利用服务实现
- app->Providers->RouteServiceProvider.php中的boot
Route::pattern('name','[a-z]+');
路由重定向
Route::redirect('重定向标识‘,'路由标识');只能使用路由标识进行跳转;
//xx/redirect 会访问到base
Route::redirect('redirect‘,'base');
Route::get('redirect',function(){
return redirect('base')
});
Route::view('标识','模板名'); //直接路由到resource下view下的模板,回调里使用view函数也可以达到同样的效果
路由名称
Route::get('name',function(){
})->name('xx'); //相当于给这条规则七个名字叫xx 在redirect时可以使用
redirect()->route('xx');
//带参数路由redirect
Route::get('name/{name}',function($name){
return $name;
});
Route::get('redirect',function(){
return redirect()->route('name',['name'=>123]); //route第二个参数为参数,第三个参数为状态码,默认302
});
路由组
对某一些路由进行相同的操作
- 路由前缀
Route::prefix('admin')->group(function(){
//访问admin/any进入这个路由
Route::any('any',function(){
return 'group any';
}) ;
});
- 路由名称
Route::name('admin')->group(function(){
//访问any进入这个路由
Route::any('any',function(){
return 'group any';
}) ;
});
Route::get('redirect',function(){
return redirect()->route('adminany'); //使用那么进行跳转时需要拼接
});
- 中间件
- 创建->功能编写->注册
- php artisan make:middleware 中间件名
- app/http下Kenel.php进行注册
//使用别名为first的中间件,会先执行中间件内的handle
Route::middleware('first')->group(function(){
Route::any('mid',function(){
return 'xxx';
}) ;
});
-
路由组
- Route::(['prefix'=>'pre',''middleware=>['first']],function(){}); 数组调用
- Route::prefix('pre')->middleware('first')->group(function(){}) 链式调用
-
创建自己的路由文件
- 创建自己的路由文件
- 在RouteServiceProvider里添加
protected function xxx(){ //在map中调用
Route::middleware('web')->namespace($this->namespace)->group(base_path('route/route.php')); //自己创建路由文件位置
}
网友评论