Locastic / ApiPlatformTranslationBundle

Translation bundle for ApiPlatform based on Sylius translation
MIT License
85 stars 28 forks source link

Initialize proxy objects if necessary #64

Closed Alex--C closed 11 months ago

Alex--C commented 1 year ago

In some cases, where no property of a lazy-loaded entity is accessed before trying to access/serialize the translations, the bundle will fail with the following error message: No locale has been set and current locale is undefined.

The issue is that the AssignLocaleListener is not called if an entity is never actually loaded from the database, but only referenced through a doctrine proxy object.

A dirty workaround is to access a property before fetching the translations, so instead of doing

    public function getTitle(): string
    {
        return $this->getTranslation()->getTitle();
    }

We can do the following:

    public function getTitle(): string
    {
        $this->getName(); // Access non-translated property to initialize the proxy and trigger the AssignLocaleListener
        return $this->getTranslation()->getTitle();
    }

Obviously that's not a great workaround. This PR ensures that the proxies are properly initialized by doctrine before trying to load the translations instead by checking if an entity is a non-initialized proxy and, if it is, initialize it first.

paullla commented 11 months ago

Thank you @Alex--C :)