Jac*_*ham 7 php serialization transformer-model jsonserializer laravel
我已经使用标准进程工作了API,但我想data
从JSON输出中删除命名空间.我看到我需要实现ArraySerializer,我已经完成了分形文档,但我无法找到我需要在Laravel 5.2中添加它的地方
我找到了这个答案,但我只是在我注释掉的代码行中得到了相同的输出:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我在一个特定的控制器上实现它,即使我有这个工作,我在哪里添加代码/类,以便我可以获得所有控制器的ArraySerializer输出?
如果有帮助的话,我已经在Github上发布了这个.
您需要创建自己的MySerializer
扩展DataArraySerializer
并使用它而不是默认值。默认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 [];
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以更改序列化机制的行为并根据需要获得结果。
归档时间: |
|
查看次数: |
1252 次 |
最近记录: |