【发布时间】:2012-03-29 06:45:03
【问题描述】:
我有一个具有以下属性的 Location 模型 -
id
City
State
Country
我不希望用户能够从现有州/国家的列表中进行选择,如果需要添加其他项目,可以将其输入到文本框中。我已将_form.php 部分修改如下 -
// city
<?php echo $form->textField($model,'city',array('size'=>60,'maxlength'=>100)); ?>
// state
<?php echo $form->dropDownList($model, 'state', CHtml::listData(Location::model()->findAll(), 'state', 'state')); ?>
<?php echo CHtml::textField('state2','',array('size'=>60,'maxlength'=>100)); ?>
// country
<?php echo $form->dropDownList($model, 'country', CHtml::listData(Location::model()->findAll(), 'country', 'country')); ?>
<?php echo CHtml::textField('country2','',array('size'=>60,'maxlength'=>100)); ?>
state2 和 country2 不是模型属性的一部分。现在,在位置控制器中,我有以下操作 -
public function actionCreate()
{
$model=new Location;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Location']))
{
$model->attributes=$_POST['Location'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
我想在执行此操作之前设置这样的值 -
if(!empty($_POST['state2'])) $model->state = $_POST['state2'];
if(!empty($_POST['country2'])) $model->country = $_POST['country2'];
到目前为止我所做的尝试
1.尝试 1
我将这些行直接添加到actionCreate 和actionUpdate。但是,我认为这不是一个干净的解决方案。
1.尝试 2 我尝试添加这样的过滤器 -
public function filterAlternateData($filterChain)
{
if(!empty($_POST['state2'])) $_POST['Location[state]'] = $_POST['state2'];
if(!empty($_POST['country2'])) $_POST['Location[country]'] = $_POST['country2'];
$filterChain->run();
}
然后我像这样修改了 filters() 函数,使其绑定到创建和更新操作 -
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'alternateData + create, update',
);
}
但这不起作用。
有人有什么想法吗?
【问题讨论】:
标签: post controller yii action