它在post / get中的可变更改模型名称?
我有大型名字的模型,比如" VerLargeModelName"和许多参数。
它不适合GET(查询字符串限制)。
更新:
我只需要更改来自CActiveForm的生成输入(将LongModelName [a]更改为short [a])
答案 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']
。