Php 将firstname和lastname合并为fullname

Php 将firstname和lastname合并为fullname,php,yii2,Php,Yii2,我用的是Yii2。我想要实现的是: 在选择时,将firstName与lastName组合并获取fullname 在“插入”上,将它们分开并插入 出于这个原因,我将我的伪代码放在下面。但当我从视图中调用fullname时,它返回null。我做错了什么 public $fullname; ... public function rules() { return [ ... [['fullname'],

我用的是Yii2。我想要实现的是:

在选择时,将firstName与lastName组合并获取fullname 在“插入”上,将它们分开并插入 出于这个原因,我将我的伪代码放在下面。但当我从视图中调用fullname时,它返回null。我做错了什么

   public $fullname; 
   ...

    public function rules()
    {
        return [
             ...
            [['fullname'], 'safe'],
            ...
        ];
    }
   public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            if ($this->fullname) {
                $pieces = explode(" ", $this->fullname);
                if (count($pieces) > 1) {
                    $this->firstName = $pieces[0];
                    $this->lastName = $pieces[1];
                }
            }
            return true;
        } else {
            return false;
        }
    }


    public function afterFind()
    {

        $this->fullname = "$this->firstName $this->lastName";
        parent::afterFind();
    }

我不确定这是否是问题所在,但您在第[[fullname'],“safe']行出现语法错误-您缺少撇号。我不认为您像使用fullname一样将firstName和lastName声明为公共变量。是吗?@m7o模型从数据库中获取它们。Fullname是一个自定义变量,由firstName和lastNameYes组成,但是当您在两个不同的函数beforeSave和afterFind中使用它们时,应该将它们声明为公共变量。如果未声明它们,afterFind将不知道它们。@m7o否,如果它们是数据库表列,则它们作为虚拟属性存在,无需将它们作为公共属性添加。