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

Ron*_*Ron 2 php regex zend-form zend-framework2

正如我在这里概述的那样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;
Run Code Online (Sandbox Code Playgroud)

即便是这个也只是被忽视了:

@Form\Messages({"regexNotMatch": "My custom message"})
Run Code Online (Sandbox Code Playgroud)

Sam*_*Sam 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!"
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

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

当使用array-style-syntax创建Annotations之外的表单时,对于像这样的键的statis方法可能会更安全一点

'messages' => array(
    \Zend\Validator\Regex::INVALID => "Regex is invalid, Booo!",
    //etc...
)
Run Code Online (Sandbox Code Playgroud)

因为字符串 - 至少在理论上 - 总是可以改变,所以常量不会.