美文网首页
laravel(二)路由

laravel(二)路由

作者: mafa1993 | 来源:发表于2020-11-14 09:48 被阅读0次

路由

  1. 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';
});

  1. 路由方法包含get post put patch delete options
    • 除get外其他方法访问,默认会报419,是由于中间件作用导致
    • 在Http、Middleware下进行中间件配置
    • 在http->kenel.php进行注册,去除verifyCsrfToken后post访问就不会报错了
    • 也可以在http middleware VerifyCsrfToken.php中在except中添加post进行排除
  2. 如果存在两个相同的路由定义,会走最后一个,不会报错,如果路由方法定义的不同,则视为两个不同的路由规则,如果uri的可选参数不同,也是两条不同路由
    • Route::get('base/{id?}',function(){})
    • Route::get('base/{id?}/{name?}',function(){}) 这是两个路由规则 ip/base/1只会访问匹配第一条
  3. 动态路由
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 参数一为对那个参数进行限制,参数二为正则
  1. 全局约束
    • 对所有的参数进行一个过滤,需要利用服务实现
    • 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 
});

路由组

对某一些路由进行相同的操作

  1. 路由前缀

Route::prefix('admin')->group(function(){
  //访问admin/any进入这个路由
   Route::any('any',function(){
       return 'group any';
   }) ;
});
  1. 路由名称
Route::name('admin')->group(function(){
  //访问any进入这个路由
   Route::any('any',function(){
       return 'group any';
   }) ;
});

Route::get('redirect',function(){
   return redirect()->route('adminany'); //使用那么进行跳转时需要拼接 
});
  1. 中间件
    • 创建->功能编写->注册
    • php artisan make:middleware 中间件名
    • app/http下Kenel.php进行注册
//使用别名为first的中间件,会先执行中间件内的handle
Route::middleware('first')->group(function(){
   Route::any('mid',function(){
       return 'xxx';
   }) ;
});
  1. 路由组

    • Route::(['prefix'=>'pre',''middleware=>['first']],function(){}); 数组调用
    • Route::prefix('pre')->middleware('first')->group(function(){}) 链式调用
  2. 创建自己的路由文件

    • 创建自己的路由文件
    • 在RouteServiceProvider里添加
protected function xxx(){ //在map中调用
    Route::middleware('web')->namespace($this->namespace)->group(base_path('route/route.php'));  //自己创建路由文件位置
}

相关文章

网友评论

      本文标题:laravel(二)路由

      本文链接:https://www.haomeiwen.com/subject/vgvibktx.html