【问题标题】:Use of include in fractal transformer Laravel 5?在分形转换器 Laravel 5 中使用包含?
【发布时间】:2016-01-04 07:45:08
【问题描述】:

我使用这个库将分形转换器添加到我的 json 输出中。

//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;

当我尝试运行此代码时,它会引发以下错误:

参数 1 传递给 App\Acme\FractalTransformers\ServiceProvidersEnquiryTransformer::transform() 必须是 App\ServiceProvidersEnquiry 的实例,给定 null,调用 在 /home/aidor/Documents/ozoServer/vendor/league/fractal/src/Scope.php 在第 307 行并定义

可能是什么问题?请推荐一些 defaultincludes 和 availableIncludes 的例子。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    错误是说$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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多