我有一个包含两个输入文本字段的表单:
<input id="ModelName_test_0" name="ModelName[test][0]" type="text">
<input id="ModelName_test_1" name="ModelName[test][1]" type="text">
使用以下命令生成这些输入字段:
<?php echo $form->textField($model,'test[0]'); ?>
<?php echo $form->textField($model,'test[1]'); ?>
现在,当我提交表单时,我会看到POST请求中的值。但是,当表单提交失败时,我无法将值返回到输入字段。打印模型显示$ test没有值; - 这是因为$ test是一个表格中的数组吗?
即使在验证之后,所有值仍然分配给变量:
if($model->validate()) {
echo "<pre>";
print_r($_POST);
return;
}
返回:
[ModelName] => Array
(
[test] => Array
(
[0] => myFirstInputField
[1] => mySecondInputField
)
)
所以这些值都在POST中,但在验证失败后它们就消失了,我得到了空变量:
[ModelName] => Array
(
[test] =>
)
在验证规则中,变量 test 被声明为 safe 。
我想要达到的目标是:
如果验证失败,则将输入的值放回相应的输入文本字段中。
任何正确方向的指针都会有所帮助:)
答案 0 :(得分:0)
问题是,CHtml::activeTextField期望模型及其中一个属性作为参数。如果属性名为test
,则为$form->textField($model,'test');
。提交表单后,test
没有任何值,或者它是一个数组(选中此项以确认,或者回显它的值或在print_r
上执行$model->attributes
。 / p>
答案 1 :(得分:0)
我在yiiframework.com网站上发现了这篇文章,帮助我解决了这个问题:http://www.yiiframework.com/doc/guide/1.1/en/form.table
这是您将其作为控制器的示例代码:
public function actionBatchUpdate()
{
// retrieve items to be updated in a batch mode
// assuming each item is of model class 'Item'
$items=$this->getItemsToUpdate();
if(isset($_POST['Item']))
{
$valid=true;
foreach($items as $i=>$item)
{
if(isset($_POST['Item'][$i]))
$item->attributes=$_POST['Item'][$i];
$valid=$item->validate() && $valid;
}
if($valid) // all items are valid
// ...do something here
}
// displays the view to collect tabular input
$this->render('batchUpdate',array('items'=>$items));
}
这就是视图的样子:
<div class="form">
<?php echo CHtml::beginForm(); ?>
<table>
<tr><th>Name</th><th>Price</th><th>Count</th><th>Description</th></tr>
<?php foreach($items as $i=>$item): ?>
<tr>
<td><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td>
<td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php echo CHtml::submitButton('Save'); ?>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->
两个代码段都来自yiiframework.com,您可以在其中找到有关如何使用“表格输入”的更多详细信息:http://www.yiiframework.com/doc/guide/1.1/en/form.table