2016-01-04 2 views
3

Я использовал эту библиотеку для добавления фрактального трансформатора в свой json-выход.Использование включения в фрактальный трансформатор Laravel 5?

//This is main tranformer for service provider enquiry transformer 
 

 
    class CustomerVehicleTransformer extends TransformerAbstract { 
 

 
      protected $defaultIncludes = [ 
 
      'service_provider_enquries' 
 
     ]; 
 
     public function transform(CustomerVehicle $customerVehicle) { 
 
      
 
       return [ 
 
        'id'  => (int) $customerVehicle->id, 
 
        'status' =>$customerVehicle->vehiclenumber 
 
        ]; 
 
      } 
 

 
     public function includeServiceProviderEnquries(CustomerVehicle $customerVehicle) { 
 

 
      $serviceProvider = $customerVehicle->service_provider_enquries; 
 
      return $this->item($serviceProvider, new ServiceProvidersEnquiryTransformer); 
 
     } 
 
    }

class ServiceProvidersEnquiryTransformer extends TransformerAbstract { 
 

 

 
    public function transform(ServiceProvidersEnquiry $book) { 
 
     return [ 
 
      'modeofpayment'  => (int) $book->modeofpayment 
 
     ]; 
 
    } 
 

 

 
}
вызова от контроллера

 $manager =new Fractal\Manager(); 
 
     if (isset($_GET['include'])) { 
 
      $manager->parseIncludes($_GET['include']); 
 
     } 
 
     $json = $manager->createData($resource)->toJson(); 
 
     echo $json;

Когда я пытаюсь запустить этот код он выдает следующее сообщение об ошибке:

Argument 1 passed to App\Acme\FractalTransformers\ServiceProvidersEnquiryTransformer::transform() must be an instance of App\ServiceProvidersEnquiry, null given, called in /home/aidor/Documents/ozoServer/vendor/league/fractal/src/Scope.php on line 307 and defined

Что может быть проблема? Предложите, пожалуйста, некоторый пример defaultincludes и availableIncludes.

ответ

2

Ошибка заключается в том, что $resource является нулевым, вам необходимо передать ему экземпляр ServiceProvidersEnquiry, а также указать некоторые ключевые строки кода для настройки ответа. Дважды проверьте документацию, чтобы проверить, что вы делаете все правильно и понять, почему это не работает: http://fractal.thephpleague.com/transformers/

Вы должны делать что-то вроде этого, я думаю:

// set up data 
$enquiry = App\ServiceProvidersEnquiry::first(); 

// set up fractal manager 
$manager = new Fractal\Manager(); 

if (isset($_GET['include'])) { 
    $manager->parseIncludes($_GET['include']); 
} 

$fractal->setSerializer(new Fractal\Serializer\ArraySerializer()); 

// set up response item 
$response = new Fractal\Resource\Item($enquiry, new \PathToYourTransformer\ServiceProvidersEnquiryTransformer); 

return response()->json($fractal->createData($response)->toArray()); 
+0

Спасибо это now..yup –

+0

Рад, что вы работает получил работу – haakym

Смежные вопросы