我正在构建一个仅提供 json/xml 数据的 RESTful 应用程序,我选择了 Silex,因为我已经(有点)了解 Symfony 2 并且因为它很小,所以我不需要 Twig 等...
没有模型,只有使用 Doctrine dbal 和序列化程序的普通旧 SQL 查询。无论如何,我应该验证 POST/PUT 请求。在不使用表单组件和模型的情况下如何做到这一点?
我的意思是 POST 数据是一个数组。我可以验证它(添加约束)吗?如何验证?
编辑:好的,现在我找到了一个有趣的库,即尊重/验证。如果需要,它还使用 sf 约束。我最终得到了这样的东西(早期代码:P),如果没有更好的东西我会使用它:
$v = $app['validation.respect'];
$userConstraints = array(
'last' => $v::noWhitespace()->length(null, 255),
'email' => $v::email()->length(null, 255),
'mobile' => $v::regex('/^\+\d+$/'),
'birthday' => $v::date('d-m-Y')->max(date('d-m-Y')),
);
// Generic function for request keys intersection
$converter = function(array $input, array $allowed)
{
return array_intersect_key($input, array_flip($allowed));
};
// Convert POST params into an assoc. array where keys are only those allowed
$userConverter = function($fields, Request $request) use($converter) {
$allowed = array('last', 'email', 'mobile', 'birthday');
return $converter($request->request->all(), $allowed);
};
// Controller
$app->match('/user', function(Application $app, array $fields)
use($userConstraints) {
$results = array();
foreach($fields as $key => $value)
$results[] = $userConstraints[$key]->validate($value);
})->convert('fields', $userConverter);