Symfony Api平台返回未转换为hydra响应的数据



我在应用程序中使用API平台,我创建了API平台的自定义分页器,但响应没有转换为hydra响应:

代码库:

use ApiPlatformCoreBridgeDoctrineOrmPaginator as Paginator;
use DoctrineORMToolsPaginationPaginator 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响应

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

  • 创建自定义分页器是而不是作为扩展Api平台的一种方式
  • 自定义查询的使用是通过扩展系统实现的

带有扩展系统的示例:

(注意操作名称(

// src/Entity/Data.php
namespace AppEntity;
/**
* @ApiResource(
*     collectionOperations = {
*          "get_only_status_true" = {
*              "method" = "get"
*          }
*     }
* )
* @ORMEntity(repositoryClass=DataRepository::class)
*/
class Data
{
/**
* @var int
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @var boolean
* @ORMColumn(type="boolean")
*/
private $status;

// getter and setters there
}
// src/Doctrine/DataExtensions.php
namespace AppDoctrine;
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");
}
}
}

最新更新