Yii 1.x如何在POST中更改模型名称(CActiveForm)

时间:2015-05-11 10:13:24

标签: yii

它在post / get中的可变更改模型名称?

我有大型名字的模型,比如" VerLargeModelName"和许多参数。

它不适合GET(查询字符串限制)。

更新:

我只需要更改来自CActiveForm的生成输入(将LongModelName [a]更改为short [a])

1 个答案:

答案 0 :(得分:1)

您只需更改名称即可。您可以像echo $form->textFieldBlock($model,'name',array('name' => 'x["name"]')或任何您想要的那样执行此操作。您还可以创建一个类(小部件),为您执行此操作。

class MyActiveForm extends CActiveForm {
    public function hiddenField($model, $attribute, $htmlOptions = array()) {
         if(isset($htmlOptions['shortName'])) {
            $htmlOptions['name'] = $htmlOptions['shortName'] . "[".$attribute."]";
            unset($htmlOptions['shortName']);
        }
        return parent::hiddenField($model, $attribute, $htmlOptions);
    }
}  

您将小部件中的CActiveFrom更改为MyActiveForm。然后使用$form->textFieldBlock($model,'name',array('shortName' => 'x')。您还可以将上述代码更改为始终更改为不带htmlOptions的短名称。所以它始终是x。但是,在这种情况下,您不能同时拥有两个表单。 Benifit是您不需要向所有人添加array('shortName' => 'x'),只需将CActiveFrom更改为MyActiveForm即可。这样可以节省您的时间,但会降低您的灵活性(可能稍后您可能需要)。

您必须为要在ActiveRecord中使用的每个输入字段创建一个函数offcourse。元素的名称将变为x['name']

在控制器中,您只需执行$model->attributes = $_POST['x']