Yii2 Rest控制器和公共变量

Yii2 Rest控制器和公共变量,rest,activerecord,yii2,Rest,Activerecord,Yii2,我用Yii2框架制作了一个REST控制器。当我试图通过ActiveRecord模型从数据库中检索记录时,JsonFormatter只提供真实属性。如何配置JsonFormatter也给我一个公共变量? 这是我的代码: 控制器 class MyController extends yii\rest\ActiveController { ... public function actionView($id) { $struct = \common\model

我用Yii2框架制作了一个REST控制器。当我试图通过
ActiveRecord
模型从数据库中检索记录时,
JsonFormatter
只提供真实属性。如何配置
JsonFormatter
也给我一个公共变量? 这是我的代码:

控制器

class MyController extends yii\rest\ActiveController
{
    ...

    public function actionView($id)
    {
        $struct = \common\models\Struct::find()->where(['id' => '285'])->One();
        if ($struct) {
            return $struct;
        }
        return false;
    }
}
模型

请求的结果

{"id":1,"name": "ciccio"}
但如果我用
print\r()
打印变量,我就有了所有对象

\app\models\Struct object
(
    [test] => ok
    [_attributes:yii\db\BaseActiveRecord:private] => Array
    (
        [id] => 1
        [name] => ciccio
    )
)
如果不在数据库表中添加空字段,如何获取变量
test
属性?

试试以下方法:

保留所有显示内容,然后覆盖getAttributes

public function getAttributes($names = null, $except = [])
    {
        return array_merge(['test'=>$this->test], parent::getAttributes($names, $except));
    }
在您的控制器中,返回如下:
return$struct
这样做:
return$struct->attributes

您可以重写该方法以添加声明为类的公共属性的自定义字段。
fields()
方法返回其值已填充到此记录中的列的名称

查看您的代码,您试图在
afterFind()
中设置
test
属性,并希望在调用
Model::find()
方法时针对所有行反映该值。如果正确,则在模型中添加以下内容:

public function fields() {
    $fields = parent::fields();
    $fields['test'] = 'test';
    return $fields;
}
现在,当您调用
\common\models\Struct::find()
时,它将返回

{"id":1,"name": "ciccio","test":"ok"}

效验如神非常感谢。
{"id":1,"name": "ciccio","test":"ok"}