Значение в поле "по умолчанию"

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Значение в поле "по умолчанию"

Сообщение God »

Всем привет!

У меня в форме есть следующая строка:

Код: Выделить всё

<?= $form->field($model, 'Kol_Bal')->input('number', ['min' => 0, 'max' => 10]) ?>
Мне нужно было сделать, что бы при создании нового элемента, в данном поле всегда было значение "по умолчанию" = 0.
Я добавил значение следующим образом:

Код: Выделить всё

<?= $form->field($model, 'Kol_Bal')->input('number', ['min' => 0, 'max' => 10, 'value' => 0]) ?>
При создании нового элемента там появилось значение 0, но теперь при редактировании выбранного элемента там всегда стоит 0, а не то значение, которое есть в бд, как это исправить?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Значение в поле "по умолчанию"

Сообщение Alexum »

Варианты:
1) В actionCreate можно задать значение для нужных полей модели перед вызовом рендера формы.

2) В rules можно воспользоваться валидатором default, задав таким образом значения по-умолчанию (если не будут заданы в форме), но отображаться в самой форме они не будут. В форме отображать значение по-умолчанию можно как placeholder.
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Значение в поле "по умолчанию"

Сообщение God »

Alexum писал(а): 2017.05.26, 14:36 Варианты:
1) В actionCreate можно задать значение для нужных полей модели перед вызовом рендера формы.

2) В rules можно воспользоваться валидатором default, задав таким образом значения по-умолчанию (если не будут заданы в форме), но отображаться в самой форме они не будут. В форме отображать значение по-умолчанию можно как placeholder.
Можете привести мне пример этих вариантов?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Значение в поле "по умолчанию"

Сообщение Alexum »

Способ №1

Код: Выделить всё

// В контроллере
public function actionCreate()
    {
        $model = new ModelName();
        if ($model->load(Yii::$app->request->post())) {
	...
        } else {
            $model->Kol_Bal = 0;  // Задаём значение
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }
Способ №2

Код: Выделить всё

//  В модели
public function rules()
{
      return [
          [['Kol_Bal'], 'default', 'value' => 0],
          ...
       ];
}

// В форме
<?= $form->field($model, 'Kol_Bal')->input('number', ['min' => 0, 'max' => 10, 'placeholder'=>0]) ?>
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Значение в поле "по умолчанию"

Сообщение God »

Alexum писал(а): 2017.05.26, 15:09 Способ №1

Код: Выделить всё

// В контроллере
public function actionCreate()
    {
        $model = new ModelName();
        if ($model->load(Yii::$app->request->post())) {
	...
        } else {
            $model->Kol_Bal = 0;  // Задаём значение
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }
Способ №2

Код: Выделить всё

//  В модели
public function rules()
{
      return [
          [['Kol_Bal'], 'default', 'value' => 0],
          ...
       ];
}

// В форме
<?= $form->field($model, 'Kol_Bal')->input('number', ['min' => 0, 'max' => 10, 'placeholder'=>0]) ?>
Я сделал вот так пока что:

Код: Выделить всё

<?= $form->field($model, 'Kol_Bal')->input('number', ['min' => 0, 'max' => 10, 'value' => !empty($model->Kol_Bal) ? $model->Kol_Bal : 0]) ?>
Или так не стоит делать?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Значение в поле "по умолчанию"

Сообщение Alexum »

Так лучше не делать, Способ №2 с точки зрения логики самый правильный.
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Значение в поле "по умолчанию"

Сообщение God »

Alexum писал(а): 2017.05.26, 15:25 Так лучше не делать, Способ №2 с точки зрения логики самый правильный.
Спасибо большое, понял.
Закрыто