Получение ошибки в многомодельной форме Yii

Я новичок в фреймворке Yii. Мне нужна мультимодельная форма, поэтому я только что прошел эта ссылка и сделал все так. У меня есть две таблицы, первая - группа, а другая - член.

Group

 ID
 name

 Member

 id
 group_id
 firstname
 lastname

Теперь я сделал модели как для таблиц, так и для CRUD. Я внес изменения в файл GroupController следующим образом.

public function actionCreate()
  {
    $group = new Group;
    $member = new Member;
    if(isset($_POST['Group'],$_POST['Member'])) {
    //Populate input data to $group and $member
      $group->attributes = $_POST['Group'];
      $member->attributes = $_POST['Member'];

    //Validate both $group and $member
      $validate = $group->validate();
      $validate = $member->validate() && $valid;

      if($valid){
        $group->save(false);
        $member->save(false);
      }
    }
    $this->render('create',array(
      'group'=> '$group',
      'member'=> '$member',
    ));
    $model=new Group;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['Group']))
    {
      $model->attributes=$_POST['Group'];
      if($model->save())
        $this->redirect(array('view','id'=>$model->id));
    }

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

и после изменения группы >> Вид >> файл create.php, подобный этому

<?php echo $this->renderPartial('_form', array('group'=>$group, 'member'=>$member)); ?>

Файл _form выглядит так

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
  'id'=>'group-form',
  'enableAjaxValidation'=>false,
)); ?>

  <p class="note">Fields with <span class="required">*</span> are required.</p>

  <?php echo $form->errorSummary($group,$member); ?>

  <div class="row">
    <?php echo $form->labelEx($model,'name'); ?>
    <?php echo $form->textField($model,'name'); ?>
    <?php echo $form->error($model,'name'); ?>
  </div>

  <div class="row">
    <?php echo $form->labelEx($member,'firstname'); ?>
    <?php echo $form->textField($member,'firstname',array('size'=>60,'maxlength'=>128)); ?>
    <?php echo $form->error($member,'firstname'); ?>
  </div>

  <div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
  </div>

<?php $this->endWidget(); ?>

</div><!-- form -->

но в конце концов я получаю такую ​​ошибку Undefined variable: group . Так может кто-нибудь, пожалуйста, скажите мне, как решить эту проблему. Я потерял один день из-за этого. Поэтому любая помощь и предложения будут очень ценными.


person Jagdish    schedule 19.01.2012    source источник


Ответы (1)


Вы делаете несколько ошибок здесь ->

когда ты звонишь

 $this->render('create',array(
      'model'=>$model,
    ));

вы не передаете модели $group или $member, которые вы создали в контроллере создания группы. Измените его на -

 $this->render('create',array(
      'group'=>$group,
      'member'=>$member,
    ));

а во-вторых, нет переменной с именем $valid... измените эту часть

$validate = $member->validate() && $valid;

  if($valid){

to

$validate = $member->validate() && $validate;

      if($validate){

теперь все должно работать нормально

person Mukesh Soni    schedule 19.01.2012
comment
Спасибо за ваш быстрый ответ. Я изменил все, что вы упомянули, но это показывает ту же проблему. Неопределенная переменная: группа - person Jagdish; 20.01.2012
comment
можете ли вы дать более подробную информацию об ошибке... например, где undefined? - person Mukesh Soni; 20.01.2012
comment
он показывает ошибку типа «Неопределенная переменная: группа», а путь к исходному файлу такой же, как этот /YII/WebApp/protected/views/member/create.php(14), а в строке (14) это похоже на ‹?php echo $this-›renderPartial('_form', array('group'=›$group, 'member'=›$member)); ?› - person Jagdish; 20.01.2012
comment
похоже, вы вызываете URL-адрес ‹domain›/index.php?r=member/create... вы внесли изменения в контроллер и представление группы. следовательно, вам нужно вызвать контроллер группы -> ‹domain›/index.php?r=group/create... если вы хотите вызвать действие создания контроллера-члена, вам нужно скопировать код действия создания контроллера группы туда - person Mukesh Soni; 20.01.2012