我有一个表单,用户选择一些选项,我想根据用户输入在DB中插入一个额外的连接字段。我需要在SCENARIO_CREATE(和更新)上执行此操作。例如:
type: A
size: 100
color: black
concatenated: A100black
我已经这样试过了:
型号:
class Xyz extends BaseXyz {
const SCENARIO_CREATE = 'create';
public function rules() {
...
['concatenated', 'generateConcatenated', 'on' => self::SCENARIO_CREATE],
...
public function generateConcatenated() {
return $this->type . $this->size . $this->color;
}
控制器:
class XyzController extends base\XyzController {
public function actionCreate() {
$model = new Xyz;
$model->scenario = Xyz::SCENARIO_CREATE;
...
我已经在规则中尝试'filter'
,但没有成功。也许我的方法是完全错误的,它不能在规则中完成?请指出我正确的方向。非常感谢!
答案 0 :(得分:0)
规则用于检查属性验证,但您也可以在规则中执行:
public function generateConcatenated($attribute,$param) {
$this->concatenated = $this->type . $this->size . $this->color;
}
我认为实现此目标的最佳后勤方法是从rules
移除属性并覆盖模型中的beforeSave()
:
public function beforeSave($insert)
{
$this->concatenated = $this->type . $this->size . $this->color;
return parent::beforeSave($insert);
}
您应该考虑yii对于新记录具有默认insert
方案,对于现有记录具有update
。