Rest 在Silex/Symfony 2中验证没有模型的POST数据?

Rest 在Silex/Symfony 2中验证没有模型的POST数据?,rest,symfony,silex,Rest,Symfony,Silex,我正在构建一个只提供json/xml数据的RESTful应用程序,我选择了Silex,因为我已经知道(一点)Symfony 2,因为它很小,我不需要细枝等等 没有模型,只有使用dbal和序列化程序的普通SQL查询。无论如何,我应该验证POST/PUT请求。如何在不使用表单组件和模型的情况下做到这一点 我的意思是POST数据是一个数组。我可以验证它(添加约束)吗?如何验证 编辑:好的,现在我发现了一个有趣的库,那就是。如果需要,它还使用sf约束。我最终得到了类似这样的东西(早期代码:P),如果没有

我正在构建一个只提供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
?我想跳过验证中的一些字段。但是如果出现错误“此字段不应”,如何克服这个问题。