代码之家  ›  专栏  ›  技术社区  ›  Henning

在Yii中,如何使窗体在对象数组中循环?

  •  0
  • Henning  · 技术社区  · 14 年前

    涉及的课程:

    class ResultForm extends CFormModel {
    
        /**
         * @var array[Result]
         */
        public $results; //Filled with an array of Result objects
    }
    
    class Result {  
        public $requiredArea;
    }
    

    <% $form = $this->beginWidget('CActiveForm'); %>
    <table>
       ....
       <% $rowCounter = 0; foreach($resultForm->results as $result): %>
           ...
           <tr>
               ....
               <td>
                   <!-- This doesn't work -->
                   <% $form->textField($resultForm,
                       "results[$rowCounter]->requiredArea") %>
    
                   <!-- Just displaying the value works -->
                   <%= $resultForm->results[$rowCounter]->requiredArea %>
               </td>
               ...
           </tr>
           <% $rowCounter++; endforeach; %>
    </table>
    <% $this->endWidget(); %>
    

    文本字段是呈现的,Yii不会抱怨,但它们不包含正确的值。

    有没有一种方法可以实现这一点,或者有没有更好的方法来遍历表单中的对象数组?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Henning    14 年前

    我想你想要的是这个而不是你所拥有的:

    <% $form->textField($result,"[$rowCounter]requiredArea") %>
    

    您要做的是传递正在迭代的模型($result),而不是父/窗体模型,并且您要以该模型的属性的名称作为第二个参数(连同$i值/数组索引)而不是实际的属性传入。

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

    另外,检查textfield()的参数: http://www.yiiframework.com/doc/api/CHtml#activeTextField-detail