2015-04-30 5 views
4

Я хочу отключить определенные текстовые поля и выпадающие списки, чтобы пользователь не мог изменять свои значения. Но всякий раз, когда я пытаюсь, он не собирает/не получает данные этого конкретного отключенного текстового поля или выпадающего списка.Yii2 Не получает значение отключенного раскрывающегося списка или текстового поля

Вот мой взгляд, где отображаются мои выпадающие списки. Это внутри for цикла:

echo $form->field($model1[$i], 'earning_item_id')->widget(Select2::classname(), [ 
    'data' => $earningslistData, 
    'options' => ['placeholder' => '', 'prevOptionID' => $model1[$i]->earning_item_id, 'prevOptionName' => $earningslistData[$model1[$i]->earning_item_id], 
        "name" => "EarningDetails[".$i."][earning_item_id]", "row_count1" => $i], 
    //'disabled' => true, 
    'pluginOptions' => [ 
     'allowClear' => true, 
     'label' => false 
    ] 
]); 

Вот как это выглядит, не отключая их:

enter image description here

Тогда, когда я сохранить его, это выглядит следующим образом:

enter image description here

Но, когда я отключу выпадающие списки, это даст мне следующее:

enter image description here

Я думаю, что Полное имя исходит из моей модели, но я не знаю, почему:

public function getFullName() 
{ 
    return $this->user ? $this->user->fname . ' ' . $this->user->lname : 'Full Name'; 
} 

Это идет то же самое, когда я отключить текстовое поле:

echo $form->field($model, 'user_id')->widget(Select2::classname(), [ 
    'data' => $listData, 
    'options' => ['placeholder' => 'Select a Staff'], 
    'disabled' => true, 
    'pluginOptions' => [ 
     'allowClear' => true, 
    ], 
])->label('Employee Name'); 

Я использую виджеты Kartik для своих полей формы. Есть ли способ исправить это? Скажите, пожалуйста.

EDIT

Благодаря комментаторами ниже я выяснил разницу между disabled и readonly. Так как это выпадающий список, вот что я сделал:

echo $form->field($model, 'user_id')->widget(Select2::classname(), [ 
    'data' => $listData, 
    'options' => ['placeholder' => 'Select a Staff', ], 
    'pluginOptions' => [ 
     'allowClear' => true, 
    ], 
])->label('Employee Name'); 

echo $form->field($model, 'user_id')->widget(Select2::classname(), [ 
    'data' => $listData, 
    'options' => ['placeholder' => 'Select a Staff', 'style' => 'display:none'], 
    'pluginOptions' => [ 
     'allowClear' => true, 
    ], 
])->label(''); 
+3

Вместо того, чтобы отключить свойство, попробуйте readOnly = true – Chinmay

+2

Вы должны использовать readonly, поле disable не будет отправлять данные на сервер. Вы можете проверить этот ответ за дополнительной информацией. Http://stackoverflow.com/a/7730719/1635676 –

+0

спасибо за ваш ответ. добавление 'readonly' в этот виджет будет' 'readonly '=> true,' но он, похоже, не работает. он все еще доступен для редактирования. похоже, ничего не изменилось. – kaynewilder

ответ

8

HTML Disabled поле формы не представит, проблема не с Yii самой. Решение в этом случае состоит в том, чтобы иметь 2 копии одного и того же поля, один из которых отключен, как вы уже включили, а другой - с тем же значением, что и ниже, после оригинала.

echo $form->field($model1[$i], 'earning_item_id')->hiddenInput()->label(''); 
+0

Я собирался ответить на свой вопрос с той же мыслью, что и вы. благодаря! здесь моя ссылка: http://stackoverflow.com/questions/368813/html-form-readonly-select-tag-input – kaynewilder

Смежные вопросы