【问题标题】:ctypevalidator array of integer validationctypevalidator 整数验证数组
【发布时间】:2013-03-09 04:38:12
【问题描述】:

如何验证模型类中的整数数组?

模型类

array('marks_Mark','CTypeValidator','type'=>'array')

marks_Mark 是一个数组。

查看

echo $form->textField($model,'marks_Mark[]',array('value'=>$value->marks_Mark,'size'=>10,'maxlength'=>3));

下一步怎么做?

【问题讨论】:

    标签: php yii


    【解决方案1】:

    这不起作用,因为您将始终从您的textField 收到string。我猜,您想让用户输入类似1, 2, 3 的内容,然后检查这些值是否都是整数,对吧?

    您可以使用常规文本字段,例如:

    <?php echo $form->textField($model, 'marks') ?>
    

    然后编写自定义验证器:

    array('marks', 'validateIntegerList')
    
    public function validateIntegerList($attribute, $params)
    {
        $message = isset($params['message']) ? 
            $params['message'] : 'Please only enter integers!';
    
        $value = $this->$attribute;
    
        // User entered single number -> OK
        if(ctype_digit(trim($value)) && strpos($value, ',')===false)
            return;
    
        // User entered list of numbers -> Check each
        foreach( explode(',', $this->$attribute) as $value) {
            if(!ctype_digit(trim($value))) {
                $this->addError($attribute, $message);
                return;
            }
        }
     }
    

    您可能需要稍微调整验证逻辑。但它应该会给你一些想法。

    【讨论】:

    • Harti...谢谢你的快速回复。兄弟在视图中,我已将文本字段放入 d foreach 中。所以在控制器中我会像数组 [pos] 一样检索它。希望你能理解。
    • 即使在这种情况下,您也可以编写自定义验证器。您应该能够修改我的示例以使用 $attribute 作为数组。我们不能在这里做你的工作;)
    猜你喜欢
    • 2017-07-28
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2014-01-21
    • 2016-08-04
    相关资源
    最近更新 更多