Rest 在Silex/Symfony 2中验证没有模型的POST数据?
我正在构建一个只提供json/xml数据的RESTful应用程序,我选择了Silex,因为我已经知道(一点)Symfony 2,因为它很小,我不需要细枝等等 没有模型,只有使用dbal和序列化程序的普通SQL查询。无论如何,我应该验证POST/PUT请求。如何在不使用表单组件和模型的情况下做到这一点 我的意思是POST数据是一个数组。我可以验证它(添加约束)吗?如何验证 编辑:好的,现在我发现了一个有趣的库,那就是。如果需要,它还使用sf约束。我最终得到了类似这样的东西(早期代码:P),如果没有更好的东西,我将使用它:Rest 在Silex/Symfony 2中验证没有模型的POST数据?,rest,symfony,silex,Rest,Symfony,Silex,我正在构建一个只提供json/xml数据的RESTful应用程序,我选择了Silex,因为我已经知道(一点)Symfony 2,因为它很小,我不需要细枝等等 没有模型,只有使用dbal和序列化程序的普通SQL查询。无论如何,我应该验证POST/PUT请求。如何在不使用表单组件和模型的情况下做到这一点 我的意思是POST数据是一个数组。我可以验证它(添加约束)吗?如何验证 编辑:好的,现在我发现了一个有趣的库,那就是。如果需要,它还使用sf约束。我最终得到了类似这样的东西(早期代码:P),如果没有
$v=$app['validation.respect'];
$userConstraints=array(
'last'=>v::noWhitespace()->长度(null,255),
'email'=>$v::email()->长度(null,255),
'mobile'=>$v::regex('/^\+\d+$/'),
“生日”=>$v::date('d-m-Y')->max(date('d-m-Y')),
);
//请求密钥交叉点的通用函数
$converter=函数(数组$input,允许数组$input)
{
返回数组相交键($input,数组翻转($allowed));
};
//将POST参数转换为仅允许使用键的关联数组
$userConverter=函数($fields,Request$Request)使用($converter){
$allowed=数组('last','email','mobile','birth');
返回$converter($request->request->all(),$allowed);
};
//控制器
$app->match('/user',函数(应用程序$app,数组$fields)
使用($userConstraints){
$results=array();
foreach($key=>$value的字段)
$results[]=$userConstraints[$key]->validate($value);
})->convert('fields',$userConverter);
这里的Symfony手册中对此做了很好的解释:如果您想使用Symfony2(与silex类似)构建API,这里有一个很好的教程:
验证silex上发送的值的最佳方法仍然是使用&components(带模型)!他们是为了完成这一点!阅读Hugo Hamon创建的完整幻灯片,使用silex构建API!(检查第42页以进行验证)
不要逐个验证操作中发送的元素
通过这样做,你将保持你的代码干净和进化 您可以使用Symfony2验证程序组件验证数组,例如
//namespace declaration
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Date;
use Symfony\Component\Validator\Constraints\NotBlank;
//....
//validation snippet
$constraint = new Collection(array(
'email' => new Email(),
'last' => new NotBlank(),
'birthday' => new Date(),
));
$violationList = $this->get('validator')->validateValue($request->request->all(), $constraint);
$errors = array();
foreach ($violationList as $violation){
$field = preg_replace('/\[|\]/', "", $violation->getPropertyPath());
$error = $violation->getMessage();
$errors[$field] = $error;
}
不需要表单也没有模型。我还在Symfony2上构建了一个RESTFull Api。为了验证我的API的POST/PUT参数,我创建了表单,以使用在此基础上构建的伟大的Sf2验证。看看这篇关于在Symfony2上制作优秀restapi的文章:我不需要表单组件,因为它是REST,那只是数据。我不知道模型。。。我不想用这个。。。我认为这类东西没有必要。你可以只使用模型(没有条令),只在实体上使用验证组件(带有断言),这更具发展性和可读性^^^^尊重看起来很好,可能会在我的下一个小项目中使用。你可以发布你对Silex的尊重服务提供商吗?
$app['validation.appress']=$app->share(函数(){return new\appress\validation\Validator;});
您是否考虑过使用Symfony ValidatorServiceProvider,它也能够验证关联数组:可以在这个约束集合中使用Uniquentity
?我想跳过验证中的一些字段。但是如果出现错误“此字段不应”,如何克服这个问题。