【问题标题】:Yii create, update form with different fieldsYii 创建、更新不同字段的表单
【发布时间】:2013-12-24 15:32:28
【问题描述】:

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

此外,还有更多实例,例如 - date_entered、date_updated 等,它们从不需要显示,而是在内部评估并存储到表中。隐藏字段将没有用,因为它们在源中仍然可见。我能想到的唯一方法是,从 _form.php 中完全删除这些字段

我尝试过使用“安全”之类的规则(),也使用过场景,但我无法解决这个问题。

在这方面的任何帮助,将不胜感激。

【问题讨论】:

  • 你为什么不想改变_form?
  • 强大框架的目的是什么。编写规则(),模型中的场景(即每个属性所在的位置),这是一个删除某些属性(即标签,字段一切......)的问题

标签: yii field crud


【解决方案1】:

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

喜欢

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

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

【讨论】:

  • 谢谢,但我想坚持使用 CActiveForm 而不是 CHtml。因此,我如何将其用作论据。例如,使用 CHtml,它可以像这样 CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save');但是如何在 $form->textField 等中应用它,假设 $form 是 CActiveForm 的一个实例
  • 例如,您可以将 _form.php 的内容复制粘贴到 _update_form.php 中,然后根据需要编辑其内容。您只需在控制器更新方法中渲染新文件。
  • 正如@veelen 所说,请执行以下操作。如果您不想编辑 _form.php,则只需复制 _form.php 并将其保存为 _edit_form.php。然后根据需要更新代码。在控制器的更新函数中渲染这个 _edit_form.php。
  • 是的,我是这样理解的。但我想不要在整个块中应用这个条件语句。
  • 是的。这就是我们使用条件块的原因。 :-)
【解决方案2】:

你想要做的真的很简单。

您可以创建另一个表单,比如说 _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)); ?>

完成!

【讨论】:

  • 我认为对于您想要实现的目标,这是正确的答案。并且应该检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多