PHP - Laravel 路由使用(详细)

根据 PHP - Laravel 创建项目到服务器(nginx、apache)运行(附带目录结构) 已经搭建好环境。

一、什么是路由?

  • 将用户的请求按照事先规划的方案提交给指定的控制器和方法来进行处理。

    PHP - Laravel 路由使用(详细)

  • 路由配置文件:routes/web.php

二、四种基础路由的定义(重点

  • 路由模板

    // 路由样式
    Route::请求方式('url', 匿名函数);
    Route::请求方式('url', '控制器名称@操作方法');
    
    ① 从服务器取出资源(一项或多项) select
    Route::get($uri, $callback);
    
    ② 在服务器新建一个资源 insert
    Route::post($uri, $callback);
    
    ③ 在服务器更新资源 update
    Route::put/patch($uri, $callback);
    
    ④ 从服务器删除资源 delete
    Route::delete($uri, $callback);
    
    4 种基础路由中,只有 GET 请求方式不进行 CSRF 验证,其它请求方式则需要 CSRF 验证
    

  • 路由例子(一)

  • 每个路由都是一种请求方式

    // get 请求,它没有 CSRF 验证
    Route::get('/get', function () {
        return 'get请求';
    });
    
    // 下面的都需要 CSRF 验证
    // post 请求
    Route::post('/post', function () {
        return 'post请求';
    });
    // put/patch 请求
    Route::put('/put', function () {
        return 'put请求';
    });
    // delete 请求
    Route::delete('/delete', function () {
        return 'delete请求';
    });
    
  • 例子效果 - 通过网站打开

    • Get 请求,没有 CSRF 验证
      PHP - Laravel 路由使用(详细)

    • Post 请求走 Postman,浏览器默认为 Get 请求。

    PHP - Laravel 路由使用(详细)

  • 例子效果 - Postman:

    • Get 请求,没有 CSRF 验证

    PHP - Laravel 路由使用(详细)

    • Post 请求,报 419 错误,后面几种请求都需要 CSRF 验证,往后看解决方案。

    PHP - Laravel 路由使用(详细)


  • 路由例子(二)

  • 一个路由支持多种请求方式

    // get 请求,它没有 CSRF 验证
    Route::get('/req', function () {
        return 'get请求';
    });
    
    // 下面的都需要 CSRF 验证
    // post 请求
    Route::post('/req', function () {
        return 'post请求';
    });
    // put/patch 请求
    Route::put('/req', function () {
        return 'put请求';
    });
    // delete 请求
    Route::delete('/req', function () {
        return 'delete请求';
    });
    
    • 例子效果 - 通过网站打开

    • Get 请求

    PHP - Laravel 路由使用(详细)

  • 例子效果 - Postman:

    • Get 请求,没有 CSRF 验证

    PHP - Laravel 路由使用(详细)

    • Post 请求,报 419 错误,后面几种请求都需要 CSRF 验证,往后看解决方案。

    PHP - Laravel 路由使用(详细)


  • 解决路由例子 CSRF 验证问题

  • PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)

  • 找到 app/Http/Middleware/VerifyCsrfToken.php 文件中的 $except 字段,添加不需要进行 CSRF 验证的路由:

    protected $except = [
      // 把想排除的路由规则卸载此数组中
      // 将下面路由的规则不进行 CSRF 验证
      '/post',
      '/req'
    ];
    
  • 再次尝试请求

    PHP - Laravel 路由使用(详细)

    PHP - Laravel 路由使用(详细)

三、match 配置路由(重点

  • 单个路由配置多个请求类型

    // match 支持一次性填写多个请求类型
    Route::match(['get', 'post'], '/req', function () {
        // return 'match 路由定义';
        dump($_SERVER);
    });
    
  • 例子效果 - Postman:

    PHP - Laravel 路由使用(详细)

    PHP - Laravel 路由使用(详细)

四、any 配置路由(实际工作中不推荐使用

  • 单个路由自适应支持所有请求

    // match 支持一次性填写多个请求类型,工作中不推荐使用这种
    Route::any('/req', function () {
        // return 'any 路由定义';
        dump($_SERVER);
    });
    
  • 例子效果 - Postman:

    PHP - Laravel 路由使用(详细)

    PHP - Laravel 路由使用(详细)

上一篇:浅谈前端安全攻防——XSS和CSRF


下一篇:什么是CSRF