0

我在 Yii2 中使用ActiveController. actionIndex返回所有模型的默认实现。我想要做的是在发送响应之前更改一个属性的值。例如,我上传了图像,其名称仅存储在数据库中。在发送响应之前,我想嵌入带有图像名称的基本 URL。我需要覆盖整个索引方法还是可以操作action方法中的单个属性?

4

2 回答 2

3

我认为最简单的方法是覆盖fields()模型中的方法。假设您为名为YourFile. 如果将以下函数添加到YourFile模型中,则可以为响应中的每个模型添加完整的 url:

public function fields() {
    return [
        'id',
        'name' => function() {
            return Url::base(true) . $this->name;
        }
    ]
}

如果你像这样添加它,它确实意味着调用toArray()你的模型的每个代码都会得到这个结果。如果您只希望它发生在ActiveController您可能想要扩展YourFile模型并fields()仅在其中包含该方法的情况下,那么您可以ActiveController使用扩展版本来配置。

于 2016-06-23T06:23:39.707 回答
1

我们还可以更改某些字段的显示名称:

class User extends \yii\db\ActiveRecord implements  \yii\web\IdentityInterface {    
/**     * API safe fields     */    
public function fields()    {

    return [            
        'id',            
        'email_address' => 'email',            
        'first_name',            
        'last_name',            
        'full_name' => function($model) {                
            return $model->getFullName();            
        },            
        'updated_at',            
        'created_at'        
    ];    
} 

}

在此处查看完整教程:http: //p2code.com/post/configuring-activecontroller-display-fields-yii-2-21

于 2016-10-27T13:10:13.540 回答