如何解决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收集操作,因此我认为创建自定义分页器不是一个好方法:
- 创建自定义分页器不是 mentionned as a way to extend Api-Platform,
- extension系统可实现自定义查询的使用。
扩展系统的示例:
(请注意操作名称)
// 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");
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。