Мультимодельные формы в yii

Как создать многомодельную форму в Yii? Я просмотрел всю документацию Yii, но не получил интересных результатов. Может кто-нибудь дать мне какое-то направление или мысли об этом? Любая помощь будет заметна.

Ответы

Ответ 1

В моем опыте я получил это решение для работы и быстро понятным

У вас есть две модели для данных, которые вы хотите собрать. Скажем Person и Vehicle.

Шаг 1: Настройте контроллер для ввода формы

В контроллере создайте объекты модели:

public function actionCreate() {

  $Person = new Person;
  $Vehicle = new Vehicle;

  //.. see step nr.3

  $this->render('create',array(
        'Person'=>$Person,
        'Vehicle'=>$Vehicle)
  );
}

Шаг 2: напишите файл просмотра

//..define form
echo CHtml::activeTextField($Person,'name');
echo CHtml::activeTextField($Person,'address');
// other fields..

echo CHtml::activeTextField($Vehicle,'type');
echo CHtml::activeTextField($Vehicle,'number');

//..enter other fields and end form

поместите некоторые ярлыки и дизайн на ваш взгляд;)

Шаг 3: Запись контроллера on $_POST действие

и теперь вернитесь к контроллеру и напишите funcionality для действия POST

if (isset($_POST['Person']) && isset($_POST['Vehicle'])) {
    $Person = $_POST['Person']; //dont forget to sanitize values
    $Vehicle = $_POST['Vehicle']; //dont forget to sanitize values
    /*
        Do $Person->save() and $Vehicle->save() separately
        OR
        use Transaction module to save both (or save none on error) 
        http://www.yiiframework.com/doc/guide/1.1/en/database.dao#using-transactions
    */
}
else {
    Yii::app()->user->setFlash('error','You must enter both data for Person and Vehicle');
 // or just skip `else` block and put some form error box in the view file
}

Ответ 3

Вам не нужна мультимодель. Для правильного использования шаблона MVC требуется модель, которая отражает ваш пользовательский интерфейс.

Чтобы решить эту проблему, вам необходимо использовать CFormModel вместо ActiveRecord для передачи данных из View в Controller. Затем внутри вашего контроллера вы проанализируете модель, модель CFormModel, и используйте классы ActiveRecord (более одного) для сохранения в базе данных.

Обзор форм и Формы моделей в Yii Окончательный Руководство содержит некоторые детали и образцы.

Ответ 4

Другие предложения -

Также мы можем использовать Wizard Behavior, это расширение, упрощающее обработку многоэтапных форм. В котором мы можем использовать многомодельные формы для процесса процесса регистрации или другие.

Демо - http://wizard-behavior.pbm-webdev.co.uk/