2016-04-14 50 views
0

: Ben öğeleri gizlemek için gizli $ korumalı kullanarak ediyorumlaravel: Hide sadece bazı rotalara modelden niteliklerini ben örneğin, sadece bazı rotalara modelden bazı özelliklerini gizlemek nasıl

ama bu gizlemek Hepsi benim işlevleri veya dinlendirici yolları (indeks, gösteri)

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

sadece Endeksi işlevinde ama bir şey gizlemek istemiyorum gösteri işlevinde gizlemek istiyorum.

cevap

0

Sen modellerde addHidden yöntemi kullanabilirsiniz:

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

: birleşti alır

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

this PR sonra, koleksiyonu doğrudan diyoruz mümkün olacak

Yorumunuza göre, bu alanların tümünü modelinizin $hidden özelliğinde saklayabilir ve Onları sadece show yönteminde görünür:

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

Bu doğru mu?'public function show ($ id) { $ resource = CTL_Resource :: burada ('idResource', $ id) -> ilk(); ($ kaynak) yanıt yanıtı() -> json ( $ resource-> load ('etiketler', 'quickTags', 'relatedTo') -> addHidden (['coachVisibility', 'thumbnail', 'studentVisibility ']) ); başka yanıt yanıtı (null, 404); } ' çünkü boş bir nesne alıyorum :(im kullanarak $ kaynak = CTL_Resource :: burada ('idResource', $ id) -> ilk();' UUID'leri kullanmam nedeniyle –

+0

@CanKerDiAlike - boş nesneyi "addHidden" çağrısı olmadan ne elde edersiniz? –

+0

modelimin içinde saklı olduğum alanlar hariç tüm nesne 'proctected $ hidden = ['some', 'data']' –

2

Dönüş verisini istediğiniz gibi dönüştürmek için Transformers'ı kullanmayı düşünün. İstersen

namespace App\Transformers; 

abstract class Transformer 
{ 

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

    public abstract function transform($item); 
} 

Daha sonra her yöntemi için özel transformatörleri oluşturmak:

soyut bir trafo oluşturun: eg için

controller içerisinde Sonra
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); 
} 

Buna avantajları bir çift vardır: Eğer sizin transformatörler sağlayacaktır belirli transformatörleri Tablonuzdaki sütun adlarını değiştirmeye karar In-durumda

  • ile istedikleri gibi

    1. Sen/gizlemek verileri gösterebilir Verilerinizi alan müşteriler kırılmayacak.
  • +0

    önce Transformers, onun bir bağımlılık/kütüphanede duydum ya da sadece örnekteki gibi sınıf oluşturmak zorunda kalmazsınız? –

    +0

    @CanKerDiAlike Onun bir kütüphane değil. Sadece sınıfları kendin yarat. –

    +0

    Tamam, cevabınızı seçmeden önce bana bir şans ver. :) Teşekkürler –