字段长度验证 - 敏捷工具包

时间:2014-01-28 18:06:42

标签: php atk4 agiletoolkit

在模型用户中我有这个字段。

 $this->addField('login')->mandatory(true)->caption('Login')->length(10);

但是当我输入超过10个字符的文本时,验证永远不会发生,并且永远不会在字段下方显示红色消息:"文字太长"

如何在敏捷工具包4.2.4中执行此操作?我想念一些基本的东西???

感谢您的建议!!

1 个答案:

答案 0 :(得分:2)

如Field类length()方法描述中所述:

 This will provide a HTML settings on a field for maximum field size.
 The length of a field will not be enforced by this setting.
 ...

字段 - >长度($ n)本身不进行任何验证。它只是用于表单字段显示的目的,你也可以在你自己的验证类中的某个地方使用这个值:

// In model class file init method
$model->addHook('beforeSave', array($this, 'customValidation'));

// In model class file
function customValidation() {
    foreach ($this->getActualFields() as $f) {
        $field = $this->getField($f);
        if ($field->length && strlen($this[$f]) > $field->length) {
            throw $this->exception('Field value to long', 'Exception_ValidityCheck')
                ->addMoreInfo('field', $f)
                ->addMoreInfo('value', $this[$f])
                ->addMoreInfo('limit', $field->length);
        }
    }
}

上面的代码完全没有经过测试 - 只是为了给你一个想法。您还可以在表单提交挂钩上验证字段值长度,但这不完全正确。更好的是在模型中做到这一点。

另请查看Romans https://github.com/romaninsh/validation制作的验证附加组件。它必须非常强大。