2016-04-14 46 views
0

我怎麼隱藏在只是一些路線模型的一些屬性,例如:Laravel:隱藏模式只是在部分航線屬性

我使用保護$隱躲的元素,但是這個隱藏在我所有的功能或REST風格的路線(指數,顯示)

$hidden = [ 
    'coachVisibility', 'thumbnail', 'studentVisibility', 
    'isHTML', 'studentIndex', 'coachIndex', 
    'isURL', 'source', 'path', 
    'status', 'updateTime', 'isfolder', 
    'parentResource', 'idModifierUser', 'idResourceType', 
    'idCreatorUser', 'idCreationCountry', 'user', 
    'country', 'resource' 
]; 

我想隱藏只有在指數的功能,但在播放功能我不想隱瞞什麼。

回答

0

您可以在模型使用addHidden方法:

class UsersController 
{ 
    public function index() 
    { 
     return User::all()->each(function ($user) { 
      $user->addHidden([.........]); 
     }); 
    } 
} 

一旦this PR被合併了,你就可以直接調用它的集合:

class UsersController 
{ 
    public function index() 
    { 
     return User::all()->makeHidden([.........]); 
    } 
} 

根據您的評論,您可以將所有這些字段保留在模型的$hidden屬性中,而改爲他們只在show方法可見:

public function show($id) 
{ 
    return CTL_Resource::where('idResource', $id) 
     ->with('tags', 'quickTags', 'relatedTo') 
     ->firstOrFail()->makeVisible([ 
      'coachVisibility', 'thumbnail', 'studentVisibility' 
     ]); 
} 
+0

這是正確的嗎?'公共功能展示($ id){ $ resource = CTL_Resource :: where('idResource',$ id) - > first(); if($ resource) return response() - > json( $ resource-> load('tags','quickTags','relatedTo') - > addHidden(['coachVisibility','thumbnail','studentVisibility ']) ); else return response(null,404);我使用'$ resource = CTL_Resource :: where('idResource',$ id) - > first();'因爲即時通訊使用UUID –

+0

@CanKerDiAlike - 你得到一個空的對象(即使用$ resource = CTL_Resource ::空對象?沒有'addHidden'調用會得到什麼? –

+0

整個對象,除了我在模型中用'proctected $ hidden = ['some','data']' –

2

考慮使用變形金剛來轉換返回數據,只要你願意。

對於如:

創建一個抽象的變壓器:

namespace App\Transformers; 

abstract class Transformer 
{ 

    public function transformCollection(array $items) 
    { 
     return array_map([$this, 'transform'], $items); 
    } 

    public abstract function transform($item); 
} 

然後爲每個方法創建自定義的變壓器,如果你喜歡:

namespace App\Transformers; 

use App\User; 

class UserTransformer extends Transformer { 

    public function transform($user) { 

     return [ 
      'custom_field' => $user['foo'], 
      'another_custom_field' => $user['bar'] 
      ... 
     ]; 

    } 
} 
在你的控制器

然後:

... 

public function index(Request $request, UserTransformer $transformer) 
{ 
    $users = User::all(); 

    return response()->json([ 
     'users' => $transformer->transformCollection($users->toArray()) 
    ], 200); 
} 

有一對夫婦的優勢,這一點:

  1. 可以顯示/隱藏數據,你具體的變壓器
  2. 套內你決定改變您的表中的列名希望,你的變壓器將確保客戶獲取您的數據不會中斷。
+0

從來沒有聽說過變壓器前,其依賴/庫或只需要創建喜歡你的例子類? –

+0

@CanKerDiAlike它不是一個圖書館。只需自己創建課程。 –

+0

好的,給我一個機會嘗試之前選擇你的答案。 :)謝謝 –