微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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");
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。