2014-01-25 3 views
0

Я хочу добавить несколько записей из формы в таблицу.Yii Tabular Input

Я пытался понять и следовать этому руководству и не

Yii tabular input

http://www.yiiframework.com/doc/guide/1.1/en/form.table

Мой код не спасает.

У меня есть комментарий в моем коде контроллера написано , здесь с функцией isset() добавил

эта часть кода не будет работать.

if(isset($_POST['MultiPart2'][$i])) 

Но когда я извлекал функцию Исеть() Я получаю ошибку Undefined смещение: 0

Это означает, что этот код

$_POST['MultiPart2'][$i] 

не работает.

Что мне делать?

Вот var_dump моего поста

$_POST['MultiPart2'] 

array(2) { 
    ["[0"]=> 
    array(3) { 
    ["'name'"]=> 
    string(3) "Vic" 
    ["'age'"]=> 
    string(2) "25" 
    ["'sex'"]=> 
    string(1) "m" 
    } 
    ["[1"]=> 
    array(3) { 
    ["'name'"]=> 
    string(3) "Vic" 
    ["'age'"]=> 
    string(2) "25" 
    ["'sex'"]=> 
    string(1) "m" 
    } 
} 

Вот мой код контроллера

public function actionCreate() 
{ 

    //insert multiple instances of model into array 
    $model=array(); 
    for ($i=0; $i < 2; $i++) { 
     $model[]=new MultiPart2; 
    } 

    if(isset($_POST['MultiPart2'])) 
    { 
     foreach ($model as $i => $model) { 

      if(isset($_POST['MultiPart2'][$i])) 
      // A 
      //with isset() the following code does not run 
      {  

       $model->attributes=$_POST['MultiPart2'][$i]; 
       if($model->save()) 
        echo "Saved"; 
      } 
     } 
    } 
    $this->render('create',array(
     'model'=>$model, 
    )); 
} 

А вот мой взгляд код

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

<?php echo $form->errorSummary($model); ?> 
    <?php 
    foreach ($model as $i => $model) { 
      ?> 

       <div class="row"> 
        <?php echo $form->labelEx($model,'name'); ?> 
        <?php echo $form->textField($model,"[$i][name]",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?> 
        <?php echo $form->error($model,'name'); ?> 
       </div> 

       <div class="row"> 
        <?php echo $form->labelEx($model,'age'); ?> 
        <?php echo $form->textField($model,"[$i][age]",array('size'=>60,'maxlength'=>100, "value"=>"5")); ?> 
        <?php echo $form->error($model,'age'); ?> 
       </div> 

       <div class="row"> 
        <?php echo $form->labelEx($model,'sex'); ?> 
        <?php echo $form->textField($model,"[$i][sex]",array('size'=>60,'maxlength'=>100, "value"=>"m")); ?> 
        <?php echo $form->error($model,'sex'); ?> 
       </div> 
       <hr> 
      <?php 
     } 

    ?> 

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

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

Вот сгенерированный HTML

<form id="multi-part2-form" action="/sam.com/system/index.php?r=multiPart2/create"  method="post"> 
    <p class="note">Fields with <span class="required">*</span> are required.</p> 



<div class="row"> 
<label for="MultiPart2_name" class="required">Name <span class="required">*</span> </label>       
<input size="60" maxlength="100" value="Vic" name="MultiPart2[[0][name]]" id="MultiPart2__0_name" type="text" />      

</div> 

<div class="row"> 
<label for="MultiPart2_age" class="required">Age <span class="required">*</span></label>       
<input size="60" maxlength="100" value="5" name="MultiPart2[[0][age]]" id="MultiPart2__0_age" type="text" />            

</div> 

<div class="row"> 
<label for="MultiPart2_sex" class="required">Sex <span class="required">*</span></label>       
<input size="60" maxlength="100" value="m" name="MultiPart2[[0][sex]]" id="MultiPart2__0_sex" type="text" />            
</div> 

<hr> 

<div class="row"> 
<label for="MultiPart2_name" class="required">Name <span class="required">*</span></label>      
<input size="60" maxlength="100" value="Vic" name="MultiPart2[[1][name]]" id="MultiPart2__1_name" type="text" />       

</div> 

<div class="row"> 

<label for="MultiPart2_age" class="required">Age <span class="required">*</span></label>       
<input size="60" maxlength="100" value="5" name="MultiPart2[[1][age]]" id="MultiPart2__1_age" type="text" />            
</div> 

<div class="row"> 
<label for="MultiPart2_sex" class="required">Sex <span class="required">*</span></label>       
<input size="60" maxlength="100" value="m" name="MultiPart2[[1][sex]]" id="MultiPart2__1_sex" type="text" />            
</div> 

<hr> 

<div class="row buttons"> 
<input type="submit" name="yt0" value="Create" /> </div> 

</form> 

ответ

0

Вы должны изменить свой вид кода, как показано ниже:

Удалить '' вокруг имени в "[$i]['name']" - и во всех областях также

<?php echo $form->textField($model,"[$i][name]",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?> 

А также изменить имя переменной в Еогеасп как сказал Voodoo417.

foreach ($model as $i => $mod) { 
+0

У меня есть сделал это, но ничего не изменилось. Я по-прежнему получаю ошибку, или код для сохранения подпрыгивает, если я добавляю функцию isset(). Любые идеи ... –

+0

просто сделайте print_r ($ _ POST); вы можете видеть формат данных –

+0

@kumar_v good edition – voodoo417

2

Изменить поколение текстовых входов:

 <?php echo $form->textField($model,"[$i]name",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?> 
       //... 
    <?php echo $form->textField($model,"[$i]age",array('size'=>60,'maxlength'=>100, "value"=>"5")); ?> 
       //.. 
    <?php echo $form->textField($model,"[$i]sex",array('size'=>60,'maxlength'=>100, "value"=>"m")); ?> 

Ее завернуть имя входа в двойных qoutes " (ныне $i оленья кожа интерпретированы как varialble - потому что в sinqle qoutes).

Также попробуйте изменения, как:

$model=array(); 
for ($i=0; $i < 2; $i++) { 
    $model[$i]=new MultiPart2; 
} 

if(isset($_POST['MultiPart2'])) 
{ 

    foreach ($model as $i=>$mod) { 

     if(isset($_POST['MultiPart2'][$i])) 
     // A 
     //with isset() the following code does not run 
     {  

      $mod->attributes=$_POST['MultiPart2'][$i]; 
      if($mod->save()) 
       echo "Saved"; 
     } 
    } 
} 

EDIT_2_ Изменение также просмотреть код (ту же ошибку с именем):

foreach ($model as $i => $mod) { 
     ?> 

      <div class="row"> 
       <?php echo $form->labelEx($mod,'name'); ?> 
       <?php echo $form->activeTextField($mod,"[$i]name",array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?> 
       <?php echo $form->error($mod,'name'); ?> 
      </div> 
      //... other inputs 

Или попробуйте как:

 foreach ($model as $i => $mod) { 
     ?> 

      <div class="row"> 
       <?php echo $form->labelEx($mod,'name'); ?> 
       <?php echo $form->textField("MultiPart2[$id]['name']",$mod['name'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?> 
       <?php echo $form->error($mod,'name'); ?> 
      </div> 



      <div class="row"> 
       <?php echo $form->labelEx($mod,'age'); ?> 
       <?php echo $form->textField("MultiPart2[$id]['age']",$mod['age'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?> 
       <?php echo $form->error($mod,'age'); ?> 
      </div> 


      <div class="row"> 
       <?php echo $form->labelEx($mod,'sex'); ?> 
       <?php echo $form->textField("MultiPart2[$id]['sex']",$mod['sex'],array('size'=>60,'maxlength'=>100, "value"=>"Vic")); ?> 
       <?php echo $form->error($mod,'sex'); ?> 
      </div> 
+0

@ Victor Njoroge обновлено по Yii Tabular – voodoo417

+0

После выполнения того, что вы предложили, и я сделал дамп var, и я вижу все данные, но все же я получаю ошибку смещения ... –

+0

@Victor Njoroge показать, что var_dump возвращает – voodoo417

Смежные вопросы