Как вывести value из БД в input yii2?

Есть форма:
<?php $f = ActiveForm::begin(['options' => ['id' => 'contact', 'class' => 'floating-labels m-t-40']]); ?>
    <?php echo $f->field($form, 'tel') ?>
    <?php echo $f->field($form, 'skype') ?>
    <?php echo $f->field($form, 'whatsapp') ?>
    <?php echo $f->field($form, 'index') ?>
    <?php echo Html::submitButton('Сохранить', ['class' => 'btn btn-danger']); ?>
<?php ActiveForm::end(); ?>


Сама модель формы:
<?php
namespace app\modules\dashboard\models;

use Yii;
use yii\db\ActiveRecord;
/**
 *
 */
class ContactForm extends ActiveRecord
{

  public static function tableName() {
    return 'contact';
  }
  
  public function rules()
  {
    return [
      [['tel', 'skype', 'whatsapp', 'index'], 'trim'],
      [['tel', 'skype'], 'required'],
    ];
  }

  public function attributeLabels()
  {
    return [
      'tel' => 'Номер телефон',
      'skype' => 'Логин Skype',
      'whatsapp' => 'Номер whatsapp',
      'index' => 'Ваш индекс',
    ];
  }

}

?>


В контроллере у меня:
public function actionProfile() {
      $id = Yii::$app->user->identity->id;
      $user = ContactForm::find()->where(['=', 'user_id', $id])->one();
      $form = new ContactForm();
      if ($form->load(Yii::$app->request->post()) && $form->validate()) {
        $id = Yii::$app->user->identity->id;
        $user = ContactForm::find()->where(['=', 'user_id', $id])->one();
        $user->tel = Html::encode($form->tel);
        $user->skype = Html::encode($form->skype);
        $user->whatsapp = Html::encode($form->whatsapp);
        $user->index = Html::encode($form->index);
        $user->save();
        return $this->refresh();
      }else{
        return $this->render('profile', compact('form', 'user'));
      }
    }


Собственно вопрос: как сделать что бы поля input автоматически заполнялись данными из БД?
Пробовал в форме делать
<?php echo $f->field($form, 'tel')->textInput() ?>
но не чего не происходит.
  • Вопрос задан
  • 483 просмотра
Решения вопроса 1
usdglander
@usdglander
Yipee-ki-yay
<?php echo $f->field($user, 'tel') ?>
Разве не так должно быть?

upd: Вы заполняете модель $user, а инпут привязываете с модели $form, которая пустая если не передаётся POST заполняющий её.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Arik
$form = new ContactForm();
$form->tel = $user->tel;


уносите логику в модель формы, там сохраняйте все. И почему форма не может знать о юзере?
Красиво было бы:
$id = Yii::$app->user->identity->id;
$user = ContactForm::find()->where(['user_id' => $id])->one();
$form = new ContactForm($user);
if ($form->load(Yii::$app->request->post()) && $form->validate() && $form->save()) {
    return $this->refresh();
}else{
    return $this->render('profile', compact('form', 'user'));
}


и в конструкторе или init сделали бы дефолтные значения полей по $user
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы