2016-03-28 10 views
5

में ऐरेसेरियलाइज़र को कार्यान्वित करके फ्रैक्टल में डेटा को निकालने का प्रयास कर रहा है। मुझे मानक प्रक्रिया का उपयोग करके एपीआई काम कर रहा है, लेकिन मैं JSON आउटपुट से data नेमस्पेस को हटाना चाहता हूं। मुझे लगता है कि मुझे ऐरेसेरियलाइज़र को लागू करने की ज़रूरत है, मैं फ्रैक्टल डॉक्स के माध्यम से रहा हूं, लेकिन मैं काम नहीं कर सकता जहां मुझे इसे लैरावेल 5.2लार्वेल 5.2

में जोड़ा गया है, मुझे this answer मिला लेकिन मुझे बस एक ही आउटपुट मिल रहा है कोड की पंक्ति मैं बाहर टिप्पणी की:

class TrackController extends ApiController 
{ 
    public function index() 
    { 
     $tracks = Track::all(); 
     //return $this->respondWithCollection($tracks, new TrackTransformer); 
     // Same response as the commented out line above 
     $response = new \League\Fractal\Resource\Collection($tracks, new TrackTransformer); 
     $manager = new \League\Fractal\Manager(); 
     $manager->setSerializer(new \League\Fractal\Serializer\ArraySerializer()); 
     return response()->json($manager->createData($response)->toArray()); 
    } 

    public function show($id) 
    { 
     $track = Track::find($id); 
     return $this->respondWithItem($track, new TrackTransformer); 
    } 
} 

इसके अलावा, मैं एक विशिष्ट नियंत्रक पर इस को लागू कर रहा हूँ, भले ही मैं इस काम, जहाँ मैं कोड/वर्ग में शामिल कर सकता तो मैं के लिए ArraySerializer उत्पादन प्राप्त कर सकते हैं मिल गया सब मेरी नियंत्रक?

मेरे पास posted this on Github है यदि यह मदद करता है।

+0

पहली छाप, मुझे लगता है कि आप '$ प्रतिक्रिया = नए \ लीग \ भग्न \ संसाधन \ संग्रह ($ ट्रैक, नए TrackTransformer) को स्थानांतरित करना चाहिए,' के बाद आप serializer –

+1

सेट करें जहां मैं इसे स्थानांतरित करूं? –

+1

'$ प्रबंधक = नया \ लीग \ फ्रैक्टल \ प्रबंधक(); $ प्रबंधक-> सेटसेरियलज़र (नया \ लीग \ फ्रैक्टल \ Serializer \ ArraySerializer()); $ प्रतिक्रिया = नया \ लीग \ फ्रैक्टल \ संसाधन \ संग्रह ($ ट्रैक, नया ट्रैकट्रांसफार्मर); ' –

उत्तर

2

आपको MySerializerDataArraySerializer का विस्तार करने की आवश्यकता है और डिफ़ॉल्ट रूप से इसका उपयोग करें। Default DataArraySerializer तीन तरीकों है और उनमें से प्रत्येक में इस के लिए वापसी मूल्यों को बदल की जरूरत:

use League\Fractal\Serializer\DataArraySerializer; 

class MySerializer extends DataArraySerializer 
{ 
    /** 
    * Serialize a collection. 
    * 
    * @param string $resourceKey 
    * @param array $data 
    * 
    * @return array 
    */ 
    public function collection($resourceKey, array $data) 
    { 
     return $data; 
    } 

    /** 
    * Serialize an item. 
    * 
    * @param string $resourceKey 
    * @param array $data 
    * 
    * @return array 
    */ 
    public function item($resourceKey, array $data) 
    { 
     return $data; 
    } 

    /** 
    * Serialize null resource. 
    * 
    * @return array 
    */ 
    public function null() 
    { 
     return []; 
    } 

} 

तो तुम serialize तंत्र के व्यवहार को बदलने और परिणाम प्राप्त के रूप में आप चाहते हैं।

+0

धन्यवाद! बहुत बुरा यह एक अंतर्निहित विकल्प नहीं है। – Staysee

0

आप spatie/laravel-fractal पैकेज या spatie/fractalistic का उपयोग करते हैं, तो आप परिणामों से data कुंजी भग्न के डिफ़ॉल्ट serializer के बजाय Spatie सरणी serializer Spatie\Fractalistic\ArraySerializer() का उपयोग करके निकाल सकते हैं। ,

Fractal::create() 
    ->collection($books) 
    ->transformWith(function($book) { return ['id' => $book['id']];}) 
    ->serializeWith(new \Spatie\Fractalistic\ArraySerializer()) 
    ->toArray(); 

यह वापस आ जाएगी ..

[ 
    ['id' => 1], 
    ['id' => 2] 
] 
बजाय

..

[ 
    'data' => [ 
     ['id' => 1], 
     ['id' => 2] 
    ] 
] 

या आप Spatie उपयोग करना चाहते हैं:

आप उपयोग कर सकते हैं इस तरह है वैश्विक स्तर पर serializer, इसे config/fractal.php फ़ाइल में जोड़ें:

<?php 

return [ 
    /* 
    * The default serializer to be used when performing a transformation. It 
    * may be left empty to use Fractal's default one. This can either be a 
    * string or a League\Fractal\Serializer\SerializerAbstract subclass. 
    */ 
    'default_serializer' => new Spatie\Fractalistic\ArraySerializer(), 
    . 
    . 
    . 
]; 

अधिक जानकारी के लिए देखें: Using a serializer

संबंधित मुद्दे