Yii 1.x 如何在 POST (CActiveForm) 中更改模型名称
Yii 1.x how to change model name in POST (CActiveForm)
它可以在 post/get 中更改型号名称吗?
我有大名字的模型,例如 "VerLargeModelName" 和许多参数。
它不适合 GET(查询字符串限制)。
更新:
我只需要更改从 CActiveForm 生成的输入(将 LongModelName[a] 更改为 short[a])
您可以更改名称。您可以像这样 echo $form->textFieldBlock($model,'name',array('name' => 'x["name"]')
或任何您想要的方式。您还可以创建一个 class(小部件),为您的
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。但是,在这种情况下,您不能同时拥有两种形式。好处是您不需要将 array('shortName' => 'x')
添加到所有这些,而只需将 CActiveFrom
更改为 MyActiveForm
。这样可以节省您的时间,但会降低您的灵活性(您以后可能需要)。
您必须为每个要从 ActiveRecord 使用的输入字段创建一个函数。元素的名称将变为 x['name']
在控制器中,您可以简单地执行 $model->attributes = $_POST['x']
。
它可以在 post/get 中更改型号名称吗?
我有大名字的模型,例如 "VerLargeModelName" 和许多参数。
它不适合 GET(查询字符串限制)。
更新:
我只需要更改从 CActiveForm 生成的输入(将 LongModelName[a] 更改为 short[a])
您可以更改名称。您可以像这样 echo $form->textFieldBlock($model,'name',array('name' => 'x["name"]')
或任何您想要的方式。您还可以创建一个 class(小部件),为您的
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。但是,在这种情况下,您不能同时拥有两种形式。好处是您不需要将 array('shortName' => 'x')
添加到所有这些,而只需将 CActiveFrom
更改为 MyActiveForm
。这样可以节省您的时间,但会降低您的灵活性(您以后可能需要)。
您必须为每个要从 ActiveRecord 使用的输入字段创建一个函数。元素的名称将变为 x['name']
在控制器中,您可以简单地执行 $model->attributes = $_POST['x']
。