[英]yii2 conditional validation on server side
我有一種形式,該形式具有以下字段
i)賬簿ii)金額
控制器動作:
public function actionBook()
{
$model = new Book();
if ($model->load(Yii::$app->request->post()) && $model->validate()){
print_r($model);exit;
return $this->redirect('/Book');
}
$model->getBook();
return $this->render('BookForm', ['model' => $model]);
}
每當加載此頁面時,我都會默認調用一個模型函數,該函數為getBook()
模型:
public book;
public amount;
public showAmountField;
public function rules()
{
return [
[['book'], 'required'],
['amount', 'required', 'when' => function($model) {
return $model->showAmountField == true;
}],
];
}
public function getBook()
{
if(some condition here){
$this->showAmountField = true;
}
}
因此,無論何時showAmountField為true時,金額字段都是必需的,否則它將不是必需的,這里的一切工作正常,客戶端驗證也正常,但是當我當時使用console(f12)更改金額字段ID時服務器端驗證不起作用,並且表單只是提交,而value字段為空,所以這里有什么問題。 請向任何人解釋。
UPDATE
視圖
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
$this->params['breadcrumb'] = $model->breadCrumbs;
?>
<?php $form = ActiveForm::begin([
'id' => 'book-form',
'options' => ['class' => 'form-horizontal'],
]);
?>
<?= $form->field($model, 'book')->textInput()->label("Book"); ?>
<?php if($model->showAmountField): ?>
<?= $form->field($model, 'amount')->textInput()->label("Amount"); ?>
<?php endif; ?>
<?= $form->errorSummary($model, ['header' => '']); ?>
<?php ActiveForm::end(); ?>
驗證發生在字段ID上,如果您通過控制台進行更改,則該模型不了解需要驗證
$model = new Book();
if ($model->load(Yii::$app->request->post()) && $model->validate()){
print_r($model);exit;
return $this->redirect('/Book');
}
$model->getBook();
在這里,您正在初始化$ model-> getBook(); 在if塊之后,因此該模型在新實例的后期請求中被覆蓋,因此服務器端驗證在when條件下失敗。
$model = new Book();
$model->getBook();
if ($model->load(Yii::$app->request->post()) && $model->validate()){
print_r($model);exit;
return $this->redirect('/Book');
}
應該在加載后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.