gpt4 book ai didi

rest - Yii2 Rest Controller 和公共(public)变量

转载 作者:行者123 更新时间:2023-12-01 04:31:43 25 4
gpt4 key购买 nike

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

Controller

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;
}
}

模型

/**
* property string $id;
* property string $name;
*/
class Struct extends \yii\db\ActiveRecord
{
public $test;
...
public function afterFind()
{
parent::afterFind();
$this->test = 'ok';
}
}

请求结果

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

但是如果我用 print_r() 打印变量,我就有了所有对象

\app\models\Struct object
(
[test] => ok
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id] => 1
[name] => ciccio
)
)

如何在不在数据库表上添加空字段的情况下获取变量 test 属性?

最佳答案

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

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

public function fields() {
$fields = parent::fields();
$fields['test'] = 'test';
return $fields;
}

现在,当您调用 \common\models\Struct::find() 时,它将返回

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

关于rest - Yii2 Rest Controller 和公共(public)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com