многомодельные формы в yii - PullRequest
16 голосов
/ 17 июля 2011

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

Ответы [ 4 ]

19 голосов
/ 17 июля 2011

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

У вас есть две модели для данных, которые вы хотите собрать.Допустим, 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 action

и теперь вернитесь к своемуконтроллер и функция записи для действия 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
}
2 голосов
/ 17 июля 2011

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

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

Обзор форм и Модель формы глав в Yii Definitive Guide содержит некоторые детали и примеры.

1 голос
/ 17 октября 2014

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

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

Демонстрация - http://wizard -behavior.pbm-webdev.co.uk /

...