Zend Framework 2 - 注释表单,RegEx验证和自定义错误消息

时间:2012-12-28 10:56:19

标签: php regex zend-form zend-framework2

如上所述here我正在使用GeoPositionFields。因为Zend不支持这个,所以我使用了标准的RegEx验证器。

它运行良好,但我仍然需要一个自定义错误消息 - 任何想法如何实现这一目标?

我的例子中的那个什么都没做......

/**
 * @ORM\Column(type="string")
 * @Form\Filter({"name":"StringTrim"})
 * @Form\Validator({"name":"Regex", "options":{"pattern":"/(-?\d{1,3}\D\d+)[^\d-]+(-?\d{1,3}\D\d+)/"}})
 * @Form\ErrorMessage("My custom message")
 * @Form\Attributes({"type":"text"})
 * @Form\Options({"label":"GeoPos"})
 *
 */
protected $geopoint;

即便是这个也被忽略了:

@Form\Messages({"regexNotMatch": "My custom message"})

2 个答案:

答案 0 :(得分:7)

您必须使用选项中的messages键覆盖默认消息。

试试这个(我想你必须把它修剪成一行才能使注释起作用;)这取决于你,呵呵。

@Form\Validator({
    "name":"regex", 
    "options":{
        "pattern":"/(-?\d{1,3}\D\d+)[^\d-]+(-?\d{1,3}\D\d+)/",
        "messages":{
            "regexInvalid":"Regex is invalid, Booo!",
            "regexNotMatch": "Input doesn't match, bleeeeh!",
            "regexErrorous": "Internal error, i'm like wtf!"
        }
    }
})

每个Validator都有自己的消息。建议您查看源代码以找出每个元素中存在的ErrorMessages。举个例子,请点击this link (click)查看如何了解消息密钥。

当使用array-style-syntax创建Annotations之外的表单时,对于像

这样的键,可能会更安全一些。
'messages' => array(
    \Zend\Validator\Regex::INVALID => "Regex is invalid, Booo!",
    //etc...
)

由于字符串 - 至少在理论上 - 总是可以改变,因此常量不会。

答案 1 :(得分:1)

/^(\-?\d+(?:\.\d+)?),?\s*(\-?\d+(?:\.\d+)?)$/

此正则表达式验证并捕获GEO输入:

  • 格式为纬度,经度
  • 格式为纬度经度
  • 直接从GoogleMaps
  • 复制的坐标