Symfony Api Platform返回的数据未转换为Hyda响应

问题描述

我在应用程序中使用API​​平台,我创建了API平台的自定义Paginator,但响应未转换为hydra响应:

代码存储库:

use ApiPlatform\Core\Bridge\Doctrine\Orm\Paginator as Paginator;
use Doctrine\ORM\Tools\Pagination\Paginator as DoctrinePaginator;

public function findByExampleField($page,$items)
{
    $firstResult = ($page - 1) * $items;

    $queryBuilder = $this->createqueryBuilder('c')
        ->orderBy('c.id','ASC');

    $query = $queryBuilder->getQuery()
        ->setFirstResult($firstResult)
        ->setMaxResults($items);


    $dp = new DoctrinePaginator($query);
    $po = new Paginator($dp);

    return $po;
}

使用此代码,响应是常规数据,而不是hydra响应

解决方法

基于 comment 部分,由于您要扩展GET收集操作,因此我认为创建自定义分页器不是一个好方法:

扩展系统的示例:

(请注意操作名称)

// src/Entity/Data.php

namespace App\Entity;

/**
 * @ApiResource(
 *     collectionOperations = {
 *          "get_only_status_true" = {
 *              "method" = "get"
 *          }
 *     }
 * )
 * @ORM\Entity(repositoryClass=DataRepository::class)
 */
class Data
{
    /**
     * @var int
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var boolean
     * @ORM\Column(type="boolean")
     */
    private $status;
    
    // getter and setters there
}
// src/Doctrine/DataExtensions.php

namespace App\Doctrine;

class DataExtension implements QueryCollectionExtensionInterface
{
    public function applyToCollection(QueryBuilder $queryBuilder,QueryNameGeneratorInterface $queryNameGenerator,string $resourceClass,string $operationName = null)
    {
        if ($resourceClass === Data::class && $operationName === 'get_only_status_true') {
            $data = $queryBuilder->getRootAliases()[0];
            $queryBuilder->andWhere("$data.status = 1");
        }
    }
}