Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to Exclude the nested property of an Entity class? #889

Open
praditha-hidayat opened this issue Apr 6, 2022 · 1 comment
Open

How to Exclude the nested property of an Entity class? #889

praditha-hidayat opened this issue Apr 6, 2022 · 1 comment

Comments

@praditha-hidayat
Copy link

Q A
Bug report? no
Feature request? no
BC Break report? no
RFC? no

Steps required to reproduce the problem

I have an entity class called SeoConfig that has a field called $seo_data which is an object of the SeoData class.
Here is the code

<?php

use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Groups;
use Symfony\Component\HttpFoundation\File\File;

class SeoConfig
{
    private $id;

    public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    /**
     * @Groups(groups={"bootstrap_config"})
     */
    private $path;

    public function getPath()
    {
        return $this->path;
    }

    public function setPath($path)
    {
        $this->path = $path;
    }

    /**
     * @var SeoData
     * @Groups(groups={"bootstrap_config"})
     */
    private $seo_data;

    public function getSeoData()
    {
        return $this->seo_data;
    }

    public function setSeoData($seo_data)
    {
        $this->seo_data = $seo_data;
    }
}
<?php

use JMS\Serializer\Annotation as Serializer;
use JMS\Serializer\Annotation\Groups;
use Symfony\Component\HttpFoundation\File\File;

/**
 * @Serializer\ExclusionPolicy('none')
 */
class SeoData
{
    /**
     * @var string
     * @Groups(groups={"bootstrap_config"})
     */
    private $title;

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title)
    {
        $this->title = $title;
    }

    /**
     * @var string
     * @Groups(groups={"bootstrap_config"})
     */
    private $description;

    public function getDescription()
    {
        return $this->description;
    }

    public function setDescription($description)
    {
        $this->description = $description;
    }

    /**
     * I want to exclude this property because it causes the Error
     * @var File
     * @Serializer\Exclude()
     */
    private $file_image;

    public function getFileImage()
    {
        return $this->file_image;
    }

    public function setFileImage($file_image)
    {
        $this->file_image = $file_image;
    }
}

As you can see on the SeoData class, I want to @Exclude() the $file_image property, because it cause an error: Serialization of 'Symfony\Component\HttpFoundation\File\File' is not allowed and this error is happening when I try to upload a file and saving the SeoConfig data.

Here is my jms_serializer.yml file:

jms_serializer:
  default_context:
    serialization:
      serialize_null: false
      attributes:
        allows_root_null: true
  visitors:
    xml_serialization:
      format_output: false
    json_serialization:
      options:
        - JSON_UNESCAPED_SLASHES
        - JSON_PRESERVE_ZERO_FRACTION

So, I want to avoid the above error and that's why I try to @Exclude it.
But it seems it's not working on the embedded object like the sample above.
If I don't upload a file, and just save the rest data, it's working.

Expected Result

  • The $file_image property should be excluded from serializing process and it doesn't throw the Serialization of 'Symfony\Component\HttpFoundation\File\File' is not allowed error

Actual Result

  • Even though I have put the @Exclude() annotation on the above $file_image property, it still throws the error.
@scyzoryck
Copy link
Collaborator

Hi @praditha-hidayat!

Could you provide some simple repository that reproduce your issue or stack trace for the error? I've tried it, but exclusion works for me with your example. The error that you provided seems to be connected with call to serialize function over Symfony\Component\HttpFoundation\File\File, but not JSON / XML serialisation.

Best, Marcin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants