我正在用Slim重新实现我的用户管理系统,并试图找出我应该在哪里进行用户数据清理/验证。我一直在阅读有关中间件的文章,我想知道这是否是实现数据验证的合适方法。
我的验证计划是对每个包含一些用户数据(即表单)的请求使用一个验证模式(一个简单的JSON文件)。然而,不同的表单显然会使用不同的模式,并且可能存在一些类型的验证无法单独由模式处理。
因此,我实现的任何中间件都必须根据路由来决定使用哪个模式。此外,有些路由将需要超出模式中表示的验证逻辑的额外验证逻辑。不过,在我看来,这听起来是错误的方法——中间件不是应该相当"通用",对每个请求/响应执行相同的逻辑吗?
另一种方法是有某种验证对象,我用适当的模式在每个路由中初始化它,然后将我的Slim应用程序注入其中。
哪种方法更明智?
使用全局中间件没有意义,因为最终会将每个端点的参数列表耦合在一起。
我会考虑的两个选项是:
-
实现为路由中间件,这样您就可以对每个端点进行不同的过滤/验证。
例如
function fooFilter() { // filter/validate GET variables here and set back into request. } $app->get('/foo', 'fooFilter', function () { // "controller" logic });
这样做的好处是,您的控制器逻辑不需要像已经完成的那样被验证内容弄得一团糟。
-
在控制器逻辑中进行过滤/验证。这里的主要优点是,您可以更容易地审核是否使用GET变量,而无需首先进行筛选/验证。