我正在开发FOS REST API。在底层模型中,我希望能够定义表示适用于数据存储的形式的Constraints,例如,US电话号码应该正好是10位数字。
/**
* @var string
*
* @Assert'NotBlank(message="Phone is required.")
* @Assert'Regex(message="Exactly 10 digits are required.", pattern="/^'d{10}$/")
*/
private $phone;
另一方面,我希望能够接受自由值,例如格式化为的电话号码
{
"phone": "603-988-6521"
}
实现这一点的理想方法是进行某种类型的"转换"或"规范化"阶段,在验证之前,可以将选择字段转换为所有数字等。
在FOST REST范式和Symfony 3中,实现这一点的最佳方式是什么?
事实证明,这非常简单。您可以在模型的实际setter中执行所需的任何类型的规范化。您只需要将JMS序列化程序配置为使用setter,而不是使用属性反射。带注释的示例:
/**
* @var string
*
* @JMS'Accessor(getter="getPhone", setter="setPhone")
* @Assert'Regex(message="Exactly 10 digits are required.", pattern="/^'d{10}$/")
*/
private $phone;
/**
* @param string
*/
public function setPhone($phone)
{
if ($phone === null) {
$this->phone = null;
return;
}
$this->phone = preg_replace('/[^0-9]/', '', $phone);
}