Open
Description
Hi,
Ref:
#139 (comment)
ValueObjectTransformer::getPropertyValue()
return type is too strict.
Here is a form type and class which will generate an error because \DateTimeImmutable
is returned.
[2024-10-26T16:42:11.209764+00:00] request.CRITICAL: Uncaught PHP Exception TypeError: "Qossmic\RichModelForms\DataTransformer\ValueObjectTransformer::getPropertyValue(): Return value must be of type string|int|bool|null, DateTimeImmutable returned" at ValueObjectTransformer.php line 107 {"exception":"[object] (TypeError(code: 0): Qossmic\\RichModelForms\\DataTransformer\\ValueObjectTransformer::getPropertyValue(): Return value must be of type string|int|bool|null, DateTimeImmutable returned at ...vendor/qossmic/rich-model-forms-bundle/src/Qossmic/DataTransformer/ValueObjectTransformer.php:107)
<?php
declare(strict_types=1);
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class FooType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->setMethod('GET');
$builder->add('dateFrom', DateType::class, [
'label' => 'From',
'widget' => 'single_text',
'required' => true,
'input' => 'datetime_immutable',
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefault('factory', [Foo::class, 'create']);
$resolver->setDefault('immutable', true);
}
public function getBlockPrefix(): string
{
return 'foo';
}
}
<?php
declare(strict_types=1);
namespace BindHQ\Bundle\WebAppBundle\Model;
use BindHQ\Assert\Assert;
use BindHQ\Bundle\TaxBundle\Interfaces\CollectedBy;
class Foo
{
private function __construct(
private \DateTimeImmutable $dateFrom,
) {
}
public static function create(\DateTimeImmutable $dateFrom): self
{
return new self($dateFrom);
}
public function getDateFrom(): \DateTimeImmutable
{
return $this->dateFrom;
}
}
Metadata
Metadata
Assignees
Labels
No labels