2014-04-23 20 views
2

我們將用戶偏好設置爲JSON。由於我們的應用程序充當API,所以響應也以JSON形式返回,但首選項字段以字符串形式返回。我想確保在發送任何響應之前始終對這部分對象進行解碼,例如Laravel 4 - 如何在每次訪問時json_decode字段?

$user->prefs = json_decode($user->prefs); 

但是哪裏?我應該看看「超載」用戶索引方法嗎?這是更多的before_filter行動?什麼是laravel這樣做的方法?

+2

是'$ user'雄辯模型的實例? – Kryten

+0

是的。我們還使用laravel-auth-token,所以它也被用作驅動程序以及... – Aaron

回答

8

在您的模型上使用一個Eloquent存取器:

public function getPreferencesAttribute($value) 
{ 
    return json_decode($value); 
} 

然後你只需要:

$user = User::find($id); 

return $user->preferences; 

看文檔:http://laravel.com/docs/eloquent#accessors-and-mutators

+0

顯然,這裏是正確的答案! – Fuzzyma

+0

這個答案最終成爲最乾淨的,它指向我錯過的文檔。 :) – Aaron

+0

我使用了這個解決方案,但由於某種原因,每次我嘗試返回這個時,我都會得到「響應內容必須是實現了__toString(),」object「的字符串或對象。 如果我嘗試登錄它,它說:「stdClass類的對象無法轉換爲字符串」 我錯過了什麼?我正在使用laravel 4.2 – hdomos

0

我會嘗試你的模型

編寫方法在您的情況:

public function prefAsJson() 
{ 
    return json_decode($this->prefs); 
} 

您現在可以使用這樣的:$user->prefAsJson()

//編輯:我的第一個答案是剛錯誤

0

這樣做的面向對象的方法是不能直接訪問的屬性,而是使用「干將」和「爲你的交互做準備。在這種情況下,你會怎麼做:

class User { 
    public function getPrefs() { 
     return json_decode($this->prefs); 
    } 
}