2016-06-23 60 views
0

我在Yii2中使用ActiveController創建了一個REST API。 actionIndex的默認實現返回所有模型。 我想要做的是在發送響應之前更改一個屬性的值。 例如,我上傳的圖片只是其名稱存儲在數據庫中。 在發送響應之前,我想要將基本URL與圖像名稱一起嵌入。 我是否需要重寫整個索引方法,或者我可以在action方法中操作單個屬性?更改一個屬性值Yii2 REST API

+0

壓倒一切的動作是什麼將是你的情況的解決方案你想要修改的數據也是 –

+0

在發送響應之前修改該值 –

回答

3

我認爲最簡單的方法是覆蓋模型中的fields()方法。假設你已經爲稱爲​​的模型配置了你的ActiveController。如果添加的功能到​​模型可在響應每一個模型中加入了完整的URL:

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

如果添加像這樣,它確實意味着,每個代碼調用toArray()您的手機型號將獲得這個結果。如果您只希望爲ActiveController發生此問題,則可能需要擴展​​型號,並且僅在此處包含fields()方法,因此您可以使用擴展版本配置ActiveController

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