t-alexashka
@t-alexashka
Сразу пишу legacy код

Как использовать одну форму для создания и редактирования юзера?

У меня есть форма для создания пользователя, которая рендерится в модалке (не ajax)

<?php

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use common\models\Positions;
use common\models\Departs;
use common\models\PayTypes;

?>

<?php $form = ActiveForm::begin(['action'=> ['users/create'],'id' => 'form-signup', 'enableAjaxValidation' => true]); ?>
                
<?= $form->field($formRegister, 'email')->textInput(['placeholder' => 'name@domain.com']) ?>
<?= $form->field($formRegister, 'fio')->textInput(['placeholder' => 'Иванов Иван Иванович']) ?>
<?= $form->field($formRegister, 'phone_mobile')->textInput(['placeholder' => '+7XXXXXXXXXX']) ?>
<?= $form->field($formRegister, 'position_id')->dropdownList(Positions::getAllAsArray(), ['prompt' => 'Выбрать...']) ?>
<?= $form->field($formRegister, 'pay_type')->dropdownList(PayTypes::getAllAsArray(), ['prompt' => 'Выбрать...']) ?>
<?= $form->field($formRegister, 'pay_account')->textInput() ?>

<div class="form-group">
    <?= Html::submitButton('Зарегистрировать', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?>
</div>

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


Как бы мне ее можно бы использовать и для редактирования юзера, чтобы не создавать новую? При клике на кнопку "редактировать" в gridView я делаю jquery метод load в пустую модалку, и загружаю туда урл действия:

$modelUserForm = new SignupHandForm();
		return $this->renderAjax('_form-user', [
			'modelUserForm' => $modelUserForm
		]);


собсвенно вопрос, как сделать чтобы форма отобразила существующие данные модели?
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 4
Тут лучше вместо $formRegister использовать ActiveRecord модель пользователя, если поля данный формы и поля пользователя совпадают.
Именно в данной ситуации скормить в $formRegister модель редактируемого пользователя
Ответ написан
Комментировать
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
Просто берешь и используешь одну и ту же форму.

Внутри файла с моделью формы делаешь два разных метода, один для регистрации, другой для обновления\редактирования. Соответственно, вызываешь в контроллере разные методы при разных действиях.

Или речь про view файл?
тут можно добавить две разных формы одной модели и это будет работать.
Или же добавить один hiddenInput, где будет значение действия, которое можно менять джаваскриптом, исходя из значения, - делать что-то на бэкэнде.

Такие вот дела.
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
собсвенно вопрос, как сделать чтобы форма отобразила существующие данные модели?

А существующие данные они где находятся?
На клиенте? тогда заполняйте форму с помощью javascript
На сервере? тогда с помощью javascript делайте запрос на сервер на получения этих данных и опять таки заполняйте форму
На сервере но в падлу с javascript работать? Сделайте на сервер рендер содержимого формы с данными юзера и загружайте его в модалку
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Попробуйте чуть изменить действие actionUpdate($id)
$modelUserForm = $this->findModel($id);
    return $this->renderAjax('_form-user', [
      'modelUserForm' => $modelUserForm
    ]);

А id передавайте на сервер при помощи всё того же ajax.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы