使用 API 平台允许 json 中的 NULL 值

coo*_*mer 4 php symfony api-platform.com

我目前有这个实体,我想在我的 JSON 中显示我的属性“firedDate”,即使该值为空。

/**
 * @ApiResource(normalizationContext={"groups"={"employee"}})
 * @ApiFilter(DateFilter::class, properties={"dateProperty": DateFilter::INCLUDE_NULL_BEFORE_AND_AFTER})
 * @ORM\Table(name="employee")
 */
class Employee
{
    // ...

    /**
     * @ORM\Column(type="datetime", nullable=true)
     * @Groups({"employee"})
     */
    private $firedDate;


    public function getFiredDate(): ?\DateTimeInterface
    {
        return $this->firedDate;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我在做什么错?:/ 谢谢!

Win*_*zza 16

我想我找到了解决这个问题的正确方法。设置skip_null_valuesfalse您的normalizationContext

 * @ApiResource(
 *     itemOperations={
 *         "get" = {
 *             //...
 *         }
 *         "put" = {
 *             //...
 *         },
 *         "patch" = {
 *             //...
 *         }
 *     },
 *     collectionOperations={
 *         "get",
 *         "post" = {
 *             //...
 *         }
 *     },
 *     normalizationContext={
 *         "skip_null_values" = false,
 *         "groups" = {"object:read"}
 *     },
 *     denormalizationContext={"groups" = {"object:write"}}
 * )
Run Code Online (Sandbox Code Playgroud)


Ste*_*oni 8

在 ApiPlatform 3 上,默认值已从更改skip_null_values=falseskip_null_values=true

如果您不想在每个资源上设置此项,并且希望在 ApiPlatform < 3 上使用默认值,则可以简单地在全局配置中设置它:

api_platform:

    defaults:
      normalization_context:
        skip_null_values: false
Run Code Online (Sandbox Code Playgroud)

或者如果您使用基于 PHP 的配置


return static function (Symfony\Config\ApiPlatformConfig $apiConfig): void {
    $apiConfig
      ->defaults()
        ->normalizationContext(['skip_null_values' => false]);
}
Run Code Online (Sandbox Code Playgroud)