当我在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']);
}
}
答案 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();
}