yii2自定义验证addError消息不显示

时间:2018-01-06 00:37:13

标签: yii2 dynamic-forms

当我在yii2动态表单上使用自定义验证时,它不会在输入字段下面显示任何错误消息。我已经发布了我的模型。 当qty字段得到验证时,它没有显示任何错误消息

命名空间frontend \ models;

使用Yii;

类OrderD extends \ yii \ db \ ActiveRecord {

public static function tableName()
{
    return 'order_d';
}


public function rules()
{
    return [
        [['item_id', 'qty', 'price', 'value'], 'required'],
        [['item_id'], 'integer'],
        [['price', 'value'], 'number'],
        [['order_code'], 'string', 'max' => 10],
        [['item_id'], 'exist', 'skipOnError' => true, 'targetClass' => Item::className(), 'targetAttribute' => ['item_id' => 'id']],
        [['order_code'], 'exist', 'skipOnError' => true, 'targetClass' => OrderH::className(), 'targetAttribute' => ['order_code' => 'code']],
        ['qty', 'validateQty']
    ];
}

public function validateQty($attribute)
{
    $qty = $this->$attribute;
    if ($qty >= 5)
    {
        $this->addError('qty', "qty validation successful");
    }
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'id' => 'ID',
        'item_id' => 'Item ID',
        'order_code' => 'Order Code',
        'qty' => 'Qty',
        'price' => 'Price',
        'value' => 'Value',
    ];
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getItem()
{
    return $this->hasOne(Item::className(), ['id' => 'item_id']);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getOrderCode()
{
    return $this->hasOne(OrderH::className(), ['code' => 'order_code']);
}

}

3 个答案:

答案 0 :(得分:0)

一定要知道自定义验证是php函数,而不是转换为javascript以在运行时验证..这些将在页面提交并发送到控制器后工作..

这是您想要的简单示例:

              ['qty','custom_function_validation'],



        ];
    }



 public function custom_function_validation($attribute, $params){
     if($this->$attribute>5){
        $this->addError($attribute,'it\'s more than 5');
     }
}

答案 1 :(得分:0)

要创建支持客户端验证的验证器,您应该实现yii \ validators \ Validator :: clientValidateAttribute()方法,该方法返回一段在客户端执行验证的JavaScript代码。

public function clientValidateAttribute($model, $attribute, $view)
{
    return <<<JS
// your validation
JS;
}

请参阅此处的文档:http://www.yiiframework.com/doc-2.0/guide-input-validation.html#implementing-client-side-validation

答案 2 :(得分:0)

在控制器中使用方法addError(),然后仅渲染视图文件

示例

    if ($promo_code) {
        if ($promo_code->status == '1') {
            $message = 'This combination is incorrect.';
            $model->addError('promo_code', $message);
            return $this->render('index', compact('model'));
        }
        $promo_code->status = '1';
        $promo_code->save();
        $model->save();
    }