Yii创建,更新不同领域的表单

时间:2013-12-24 15:32:28

标签: yii field crud

在Yii中,相同的表单通常用于创建和更新。 因此,如果我在创建期间有电子邮件,密码,... other_fields等字段,但我不想在更新期间专门显示电子邮件和密码字段,但所有其他剩余字段应该在更新中。如何在不更改_form.php的情况下完成此操作

此外,还有更多实例,例如 - date_entered,date_updated等,它们从不需要显示,但在内部进行评估并存储到表中。隐藏字段将无用,因为它们仍将在源中可见。我能想到的唯一方法就是从_form.php

中完全删除这些字段

我尝试过使用诸如'safe'之类的规则()以及使用过的方案,但我无法解决这个问题。

在这方面的任何帮助,将受到高度赞赏。

2 个答案:

答案 0 :(得分:4)

对于编辑/更新操作,isNewRecord字段在模型对象中设置为true / 1.

<?php
if($model->isNewRecord)
{
   $form->textField ......
}
?>

只需在_form.php中检查此字段,如果为false / 0,则添加电子邮件和密码字段。

答案 1 :(得分:3)

你要做的事情非常简单。

您可以创建另一个表单,例如_form2并将_form中的原始数据复制粘贴到其中,然后删除您不想填充的数据。

所以在那之后,让我们说你不希望在更新时出现电子邮件,所以进入控制器并像这样编辑动作并渲染另一个表单:

public function actionUpdate($id){
$model = new WhateverModel();
// Lets say that you want to insert your own data it any field, do it like this :
$model->whateverattribute_column = $whateverData;
#some code is here... yada yada
$this->render('update',array('model'=>$model));

}

之后,您可以在“更新”视图中渲染部分,如下所示:

<?php $this->renderPartial('_form2',array('model'=>$model)); ?>

完成!