Yii:在actionCreate和actionUpdate之前更新模型值

时间:2012-03-29 06:45:04

标签: post controller yii action

我有一个具有以下属性的位置模型 -

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)); ?>

state2country2不属于模型属性。现在,在位置控制器中,我有以下操作 -

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 我将这些行直接添加到actionCreateactionUpdate。但是,我不认为这是一个干净的解决方案。

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',
    );
}

但这不起作用。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以在模型的beforeSave()方法中添加行(您必须覆盖它)。

答案 1 :(得分:0)

我认为这是在基于actionCreate()方法的CRUD操作中发生的。

我个人会为具有以下属性的创建功能创建一个单独的表单。

表格

  • 城市
  • 国家
  • 新城(不是必需的)
  • 新州(不是必需的)
  • 新国家(不是必需的)

然后在表单验证中,您可以检查用户是否已输入已存在的城市,州或国家等。