簡體   English   中英

yii2條件驗證設置值為NULL

[英]yii2 Conditional Validation setting value to NULL

  ['state', 'required', 'when' => function ($model) {
                return $model->country != null;
            }, 'enableClientValidation' => false],

添加此代碼后,為什么country屬性更新為具有null值? 我發現上面的規則不起作用,因為當我在模型規則中添加這些代碼時, country僅設置為NULL

在我的控制器上,我使用以下命令設置數據:

 $model = Country::findOne($country_id);
 $model->load(Yii::$app->request->post());

在我看來,我只有這個自定義的html,我沒有使用yii2的視圖

 <form ='form1'>
    <input name="Country[country_name]" type="text"/>
    </form>

<form ='form2'>
<input name="Country[state_name]" type="text"/>
</form>

由於您沒有發布足夠多的代碼讓任何人都知道您擁有什么,因此這與我所能達到的程度非常接近。 如果您添加更多代碼,我可能會更新此答案。 我們需要查看更多的模型,控制器和視圖。

在視圖文件中,這將有幫助,這樣我就可以看到為您的輸入分配了哪些ID,這將使我能夠提供更詳細的代碼。 因此,現在,您需要查看表單並查看輸入元素上的ID。 將以下javascript中的REPLACEHERE替換為您的ID開頭。

模型

['state_name', 'required', 'when' => function($model) {
        return !empty($model->country_name);
    }, 'whenClient' => "isCountryEmpty"
],

放置在視圖文件的底部:

<?php $this->registerJs('
    function isCountryEmpty (attribute, value) {
        return ($("#REPLACEHERE-country_name").val().length > 0) ? true : false;
    };
    jQuery( "#REPLACEHERE-country_name" ).keyup(function() {
        $("#w0").yiiActiveForm("validateAttribute", "REPLACEHERE-state_name");
        $("#w0").yiiActiveForm("validateAttribute", "REPLACEHERE-country_name");
    });
    jQuery( "#REPLACEHERE-state_name" ).keyup(function() {
        $("#w0").yiiActiveForm("validateAttribute", "REPLACEHERE-state_name");
        $("#w0").yiiActiveForm("validateAttribute", "REPLACEHERE-country_name");
    });
'); ?>

模型中的whenClient告訴它運行客戶端驗證,並在javascript中調用isStateEmpty函數。 其他2個javascript檢測statecountry輸入的變化。 在輸入keyup它們會觸發Yii ActiveForm javascript重新驗證。

希望對您有所幫助!


編輯

添加視圖的代碼后,您的名稱不正確。 在您看來,您具有state_namecountry_name但在模型中僅使用state 我已經更新了上面的代碼以反映這一點。

如果您未使用Yii表單,則不會獲得客戶端驗證。 當ActiveForm創建表單時,這些元素受附加到元素的專用Yii ID的約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM