逗人,
我想直接在RequestParam中验证电子邮件。 我使用这种REGEX:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
但是解析器无法在需求选项
中加载正则表达式The parameter \"&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$\" must be defined.
我如何验证类似的电子邮件:
/**
* @Rest\Patch(
* "v1/customer/update",
* name="Update a customer"
* )
* @RequestParam(
* name="email",
* requirements="email",
* description="The email of the user",
* strict=true
* )
*/
提前致谢
答案 0 :(得分:0)
我获得了一项服务,可以将参数转换为Value对象,并在创建时对其进行验证。我发现这允许比RequestParam验证中给出的更多控制。
# In the same way a string is converted to a Entity, we can convert to a Vo\Username
username_converter:
class: Ca\Api\Request\ParamConverter\UsernameConverter
tags:
- { name: request.param_converter, priority: -2, converter: username_converter }
在example和内置UsernameConverter
之后创建DoctrineParamConverter
类非常简单,但是将值放入一个也被检查的对象中,它更容易,因为不需要数据库访问。
如果值对象构造函数验证失败,就像这样(这将是一封电子邮件):
if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException(sprintf('"%s" is not a valid email', $address));
}
然后框架捕获了异常。