Skip to content

access locale and current locale don't "load" object #759

Open
@mpoiriert

Description

@mpoiriert

The default and current local of a translation is done via the "postLoad".

When have a proxy object the post load event is only triggered if we access a property that is not in the list of "$skippedProperties"

Accessing any property that are not in the orm (and id) will not trigger the post load event.

so this code:

protected function doTranslate(?string $locale = null, bool $fallbackToDefault = true): TranslationInterface
{
   if ($locale === null) {
     $locale = $this->getCurrentLocale();
    }
       
    // ...
}

Will always return 'en' on the first call if "translate" is the first method call (proxy will not get initialize).

Which is the wrong behavior.

I have not idea how to fix this properly since it's doctrine proxy factory that decide which proper to that should be skipped.

 while ($reflector) {
   foreach ($reflector->getProperties($filter) as $property) {
     $name = $property->name;

     if ($property->isStatic() || (($class->hasField($name) || $class->hasAssociation($name)) && ! isset($identifiers[$name]))) {
       continue;
     }

     $prefix = $property->isPrivate() ? "\0" . $property->class . "\0" : ($property->isProtected() ? "\0*\0" : '');

     $skippedProperties[$prefix . $name] = true;
   }

   $filter    = ReflectionProperty::IS_PRIVATE;
   $reflector = $reflector->getParentClass();
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions