2016-09-28 25 views
0

我一直在尋找這個無處不在,但無法找到答案。Yii2 ActiveForm dropDownList在表單中設置的值,但在beforeSave中爲空

我正在使用Gii CRUD發生器,我爲更新的字段進行了自定義。與驗證規則無關,因爲我沒有收到任何錯誤。

這是場景:我想要一個dropDownList,用戶從中選擇一個列表項並在模型中更新項目。

問題:當我在_form.php中記錄值時,它們被正確檢索並顯示在窗體上。但是,當我單擊更新按鈕並在beforeSave中記錄模型值時,我發現目標字段爲空。我沒有得到任何錯誤,模型被保存爲空字段。

以下是我的代碼。

_form.php這個

<?php $form = ActiveForm::begin(); ?> 

    .... 

    <?php $list = ArrayHelper::map($this->context->getListItems($model->id), 'id', 'item'); ?> 
    <?= $form->field($model, 'item')->dropDownList($list, ['prompt'=>'Select...']) ?> 

    .... 

<?php ActiveForm::end(); ?> 

型號:

<?php 

    .... 

    public function beforeSave($insert) 
    { 
     echo '<pre>'; 
     print_r($this); 
     echo '</pre>'; 
     exit(); 

     return parent::beforeSave($insert); 
    } 

    .... 

?> 

以上的結果是:

frontend\models\Model Object 
(
    [_attributes:yii\db\BaseActiveRecord:private] => Array 
     (
      .... 
      [id] => 14 
      [item] => 
      [last_modified] => 2016-09-28 13:16:43 
      .... 

通知如何是空的。

任何提示?

+0

表單是否顯示選定的項目更新? –

+1

你說它與驗證規則無關,但如果你在模型上使用'load()'方法,並且沒有定義屬性的規則,這個屬性沒有設置,所以這可能就是'item'爲空的原因。 – Bizley

+0

@InsaneSkull是它顯示正確。不過,@Bizley是對的。它必須使用'load()'來處理,因此使用驗證規則。 – intumwa

回答

0

我不能說出真正的問題,但在我的情況下,我有2個模型,孩子有自己的規則,父母有自己的規則。我試圖合併這兩個規則(來自父母和孩子模型),但它不起作用。所以我移動了父模型中的所有規則。