美文网首页
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