NightBuster
@NightBuster

Правильная генерация ActiveForm из связанных моделей в Yii2?

Возникла проблема, необходимо реализовать форму из связанных таблиц, условно назовем их Post и Author
Хотелось бы найти решение "по феншую", позволяющее гибко создавать формы с помощью ActiveForm, не добавляя в модели тучу геттеров/сеттеров. Одним из последних попыток данной реализации было следующее:

...
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model->author, 'LastName')->textInput(['placeholder' => 'Фамилия']); ?>
<?= $form->field($model->author, 'FirstName')->textInput(['placeholder' => 'Имя']); ?>
...


При этом в actionCreate контроллера прописывал следующее:
$model->populateRelation('author', new Author());

При сохранении модель Post видит $this->author пустой

P.S.: Я понимаю что это со стороны выглядит очень глупым вопросом для тех кто знает как правильно делать, но пол дня гугла не помогли мне, к сожалению найти нормальный рабочий пример, с листингом моделей, контроллера и формы
  • Вопрос задан
  • 2862 просмотра
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
> Хотелось бы найти решение "по феншую", позволяющее гибко создавать формы с помощью ActiveForm, не добавляя в модели тучу геттеров/сеттеров.

Таким решением может быть Widget. Он на себя возьмет нужную тучу геттеров/сеттеров и позволит повторно использовать себя в разных местах, если это нужно.

> При сохранении модель Post видит $this->author пустой

Вы случаем не путаете ->populateRelation($name, $records) с ->link($name, $model, $extraColumns = [])?

UPD:

1. Создаете форму как у вас в примере
2. После сабмита формы ловите данные и загружаете в модель этого же класса

$author= new Author();
$author->load( Yii::$app->getRequest()->post() );

3. Вы убедились что данные верные, они прошли валидацию и сохраняете модель

$author->save();

4. теперь вам надо связать Post и Author

# Можно сделать это вручную
$post->author_id = $author->id;
$post->save();

# Или автоматически
$post->link( 'author', $autor );

5. Все, воркен комплитен. Сущность создана и связана с постом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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