【问题标题】:Yii2 attributeLabels not workingYii2属性标签不起作用
【发布时间】:2016-12-06 08:16:17
【问题描述】:

我是 Yii 2 的新手,我的基本 API 工作正常,现在我正在尝试更改从数据库返回的字段名称, 所以我在我的模型中添加了attributeLabels() 并更改了字段的名称,但它没有反映。

任何人都可以帮助我吗?以下是我的模型代码(这是用于 API)。

public function attributeLabels()
{
    return [
        'ID' => 'ID',
        'LOGIN' => 'Login',
        'FIRST_NAME' => 'First Name',
        'LAST_NAME' => 'Last Name',
        'EMAIL_ADDRESS' => 'Email Address',
    ];
}

我必须在控制器中添加任何内容吗?我只有actionIndex 可以返回所有记录。下面是我的控制器的代码

public function actionIndex()
{   
    $model = Phdlist::find()
            ->limit(100)
            ->all();
    Yii::$app->response->format = Response::FORMAT_JSON;
    return $model;
}

【问题讨论】:

    标签: yii2 yii2-advanced-app


    【解决方案1】:

    属性标签用于显示目的,并没有成为模型属性的键.. 在您的函数中,您似乎需要返回一组模型(在 JSON_FORMAT 中)

    在你检索的集合中,单个对象属性的名称是基于键名的:

        'ID' 
        'LOGIN' 
        'FIRST_NAME' 
        'LAST_NAME' 
        'EMAIL_ADDRESS'
    

    【讨论】:

    • 感谢您的回复,请您帮我将名称转换为用户可读名称..
    • 如果您将此结果发送给在 javascript 中处理此结果的客户端,您可以添加一个适当的属性作为列标题并处理此属性.. 否则.. 您应该更好地解释您想要什么使用这个生成的 json 转换模型 ..
    • 我将结果集作为表中的字段名,但我不想显示表名,所以我想更改字段...
    • 我不明白尝试更新您的问题并添加适当的示例.. 请
    • 我的表的字段名称为 'ID' 'LOGIN' 'FIRST_NAME' 'LAST_NAME' 'EMAIL_ADDRESS' 我不想在我的结果中显示为相同的。所以我想将结果显示为“ID”:1,“USERNAME”:“loginname”,“FIRST NAME”:“some name”,“LAST NAME”:“some name1”,现在我得到结果为“ID” : 1, "LOGIN": "loginname", "FIRST_NAME": "some name", "LAST_NAME": "some name1",
    【解决方案2】:

    如果我理解正确,那么您应该使用yii\base\Model::fields() 来解决您的问题。

    结帐http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields,尤其是标题为覆盖fields()的部分。

    默认情况下,yii\base\Model::fields() 将所有模型属性返回为 字段,而 yii\db\ActiveRecord::fields() 只返回 已从 DB 填充的属性。

    您可以覆盖fields() 以添加、删除、重命名或重新定义字段。

    这是该页面中的一个相关示例(特别是 'email' => 'email_address')-

    // explicitly list every field, best used when you want to make sure the changes
    // in your DB table or model attributes do not cause your field changes (to keep API backward compatibility).
    public function fields()
    {
        return [
            // field name is the same as the attribute name
            'id',
            // field name is "email", the corresponding attribute name is "email_address"
            'email' => 'email_address',
            // field name is "name", its value is defined by a PHP callback
            'name' => function ($model) {
                return $model->first_name . ' ' . $model->last_name;
            },
        ];
    }
    

    您需要将此添加到您的模型代码中。在您的情况下,它将是'login' => 'username'。但是,请记住属性名称不能有空格。因此,据我所知,'first_name' => 'first name' 行不通。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-25
      • 2011-10-16
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多