使用 Ajax、Yii2 ActiveForm 验证唯一字段
Validate unique field using Ajax, Yii2 ActiveForm
我是 Yii 的新手,无法理解 ajax 验证如何与 ActiveForm
一起工作。
在我的模型中,我有独特的领域:
public function rules()
{
return [
//...
[['end_date'], 'unique'], //ajax is not working
[ 'end_date', //ajax is working
'compare',
'compareAttribute'=>'start_date',
'operator'=>'>=',
'skipOnEmpty'=>true,
'message'=>'{attribute} must be greater or equal to "{compareValue}".'
],
];
}
比较规则已通过 ajax 验证并且工作正常,但 unique
不是。我尝试在表单上启用 ajax 验证:
<?php $form = ActiveForm::begin( ['id' => 'routingForm', 'enableClientValidation' => true, 'enableAjaxValidation' => true]); ?>
但是不知道接下来要做什么。
控制器:
public function actionCreate()
{
$model = new Routing();
$cities = [];
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
} else {
return $this->renderAjax('create', [
'model' => $model,
'cities' => $cities
]);
}
}
我知道我可以 ajax 在 end_date
更改事件和表单 submit
时调用控制器,但不确定如何使所有适当的 css 显示错误.
您需要在控制器中使用Yii::$app->request->isAjax
。
public function actionCreate()
{
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
} else {
return $this->renderAjax('create', [
'model' => $model,
'cities' => $cities
]);
}
}
在您的控制器中尝试此代码...
public function actionCreate()
{
$model = new Routing();
$cities = [];
if(Yii::$app->request->isAjax){
$model->load(Yii::$app->request->post());
return Json::encode(\yii\widgets\ActiveForm::validate($model));
}
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
} else {
return $this->renderAjax('create', [
'model' => $model,
'cities' => $cities
]);
}
}
我是 Yii 的新手,无法理解 ajax 验证如何与 ActiveForm
一起工作。
在我的模型中,我有独特的领域:
public function rules()
{
return [
//...
[['end_date'], 'unique'], //ajax is not working
[ 'end_date', //ajax is working
'compare',
'compareAttribute'=>'start_date',
'operator'=>'>=',
'skipOnEmpty'=>true,
'message'=>'{attribute} must be greater or equal to "{compareValue}".'
],
];
}
比较规则已通过 ajax 验证并且工作正常,但 unique
不是。我尝试在表单上启用 ajax 验证:
<?php $form = ActiveForm::begin( ['id' => 'routingForm', 'enableClientValidation' => true, 'enableAjaxValidation' => true]); ?>
但是不知道接下来要做什么。
控制器:
public function actionCreate()
{
$model = new Routing();
$cities = [];
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
} else {
return $this->renderAjax('create', [
'model' => $model,
'cities' => $cities
]);
}
}
我知道我可以 ajax 在 end_date
更改事件和表单 submit
时调用控制器,但不确定如何使所有适当的 css 显示错误.
您需要在控制器中使用Yii::$app->request->isAjax
。
public function actionCreate()
{
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
} else {
return $this->renderAjax('create', [
'model' => $model,
'cities' => $cities
]);
}
}
在您的控制器中尝试此代码...
public function actionCreate()
{
$model = new Routing();
$cities = [];
if(Yii::$app->request->isAjax){
$model->load(Yii::$app->request->post());
return Json::encode(\yii\widgets\ActiveForm::validate($model));
}
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
} else {
return $this->renderAjax('create', [
'model' => $model,
'cities' => $cities
]);
}
}