我应该将用户数据净化/验证作为中间件来实现吗


Should I implement user data sanitization/validation as middleware?

我正在用Slim重新实现我的用户管理系统,并试图找出我应该在哪里进行用户数据清理/验证。我一直在阅读有关中间件的文章,我想知道这是否是实现数据验证的合适方法。

我的验证计划是对每个包含一些用户数据(即表单)的请求使用一个验证模式(一个简单的JSON文件)。然而,不同的表单显然会使用不同的模式,并且可能存在一些类型的验证无法单独由模式处理。

因此,我实现的任何中间件都必须根据路由来决定使用哪个模式。此外,有些路由将需要超出模式中表示的验证逻辑的额外验证逻辑。不过,在我看来,这听起来是错误的方法——中间件不是应该相当"通用",对每个请求/响应执行相同的逻辑吗?

另一种方法是有某种验证对象,我用适当的模式在每个路由中初始化它,然后将我的Slim应用程序注入其中。

哪种方法更明智?

使用全局中间件没有意义,因为最终会将每个端点的参数列表耦合在一起。

我会考虑的两个选项是:

  1. 实现为路由中间件,这样您就可以对每个端点进行不同的过滤/验证。

    例如

    function fooFilter() {
        // filter/validate GET variables here and set back into request.
    }
    $app->get('/foo', 'fooFilter', function () {
        // "controller" logic
    });
    

    这样做的好处是,您的控制器逻辑不需要像已经完成的那样被验证内容弄得一团糟。

  2. 在控制器逻辑中进行过滤/验证。这里的主要优点是,您可以更容易地审核是否使用GET变量,而无需首先进行筛选/验证。