Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/DefaultFormFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,12 @@ public function __construct(
/**
* {@inheritdoc}
*/
public function create(string $dataClass): FormInterface
public function create(string $dataClass, array $data = []): FormInterface
{
if ($data) {
return $this->import($this->dataMapperFactory->create($dataClass)->toDataObject($data)->dto);
}

return $this->cache[$dataClass] ??= new Form(
$this->transformerFactory->create($dataClass),
$this->dataMapperFactory->create($dataClass),
Expand Down
3 changes: 2 additions & 1 deletion src/FormFactoryInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ interface FormFactoryInterface
* Create a form instance which handle given DTO class
*
* @param class-string<T> $dataClass DTO class name
* @param array<string, mixed> $data Initial data to populate the form. Keys must corresponds to form properties. Partial data are accepted.
*
* @return FormInterface<T>
*
* @template T as object
*/
public function create(string $dataClass): FormInterface;
public function create(string $dataClass, array $data = []): FormInterface;

/**
* Create a form and import data into it
Expand Down
2 changes: 1 addition & 1 deletion src/Transformer/RuntimeFormTransformerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
{
$transformers = [];
$needCast = $property->hasType();
$needDefaultValue = $property->getDefaultValue() !== null;
$needDefaultValue = $property->hasDefaultValue() && $property->getDefaultValue() !== null;

Check warning on line 103 in src/Transformer/RuntimeFormTransformerFactory.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "LogicalAnd": --- Original +++ New @@ @@ { $transformers = []; $needCast = $property->hasType(); - $needDefaultValue = $property->hasDefaultValue() && $property->getDefaultValue() !== null; + $needDefaultValue = $property->hasDefaultValue() || $property->getDefaultValue() !== null; foreach ($property->getAttributes() as $attribute) { $className = $attribute->getName(); if (!is_subclass_of($className, FieldTransformerInterface::class) && !is_subclass_of($className, DelegatedFieldTransformerInterface::class)) {

foreach ($property->getAttributes() as $attribute) {
$className = $attribute->getName();
Expand All @@ -117,7 +117,7 @@
$needCast = false;
}

if ($needDefaultValue && $className === DefaultValue::class) {

Check warning on line 120 in src/Transformer/RuntimeFormTransformerFactory.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "LogicalAnd": --- Original +++ New @@ @@ if ($needCast && $className === Cast::class) { $needCast = false; } - if ($needDefaultValue && $className === DefaultValue::class) { + if ($needDefaultValue || $className === DefaultValue::class) { $needDefaultValue = false; } }

Check warning on line 120 in src/Transformer/RuntimeFormTransformerFactory.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "Identical": --- Original +++ New @@ @@ if ($needCast && $className === Cast::class) { $needCast = false; } - if ($needDefaultValue && $className === DefaultValue::class) { + if ($needDefaultValue && $className !== DefaultValue::class) { $needDefaultValue = false; } }
$needDefaultValue = false;
}
}
Expand Down
22 changes: 15 additions & 7 deletions src/Util/Code.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
public static function value(mixed $value): string
{
return match (true) {
$value instanceof PhpExpressionInterface => (string) $value,

Check warning on line 62 in src/Util/Code.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "CastString": --- Original +++ New @@ @@ public static function value(mixed $value) : string { return match (true) { - $value instanceof PhpExpressionInterface => (string) $value, + $value instanceof PhpExpressionInterface => $value, // Replace LF by PHP_EOL constant to ensure that the generated string will be written on a single line is_string($value) => str_replace(PHP_EOL, '\' . PHP_EOL . \'', var_export($value, true)), is_object($value) => self::dumpObject($value),
// Replace LF by PHP_EOL constant to ensure that the generated string will be written on a single line
is_string($value) => str_replace(PHP_EOL, '\' . PHP_EOL . \'', var_export($value, true)),
is_object($value) => self::dumpObject($value),
Expand All @@ -84,20 +84,28 @@
public static function instantiate(object $o): string
{
$reflection = new ReflectionClass($o);
$constructor = $reflection->getConstructor();

if (!$constructor) {
return self::new($o::class);
}

$properties = [];

foreach ($reflection->getProperties() as $property) {
if ($property->isPromoted()) {
$value = $property->getValue($o);
foreach ($constructor->getParameters() as $parameter) {
if (!$parameter->isPromoted()) {
continue;
}

$property = $reflection->getProperty($parameter->name);
$value = $property->getValue($o);

if ($value !== $property->getDefaultValue()) {
$properties[$property->name] = $property->getValue($o);
}
if (!$parameter->isDefaultValueAvailable() || $value !== $parameter->getDefaultValue()) {
$properties[$property->name] = $value;
}
}

return self::new(get_class($o), $properties);
return self::new($o::class, $properties);
}

/**
Expand Down Expand Up @@ -224,7 +232,7 @@
*/
public static function new(string $class, array $arguments = []): string
{
if ($class[0] !== '\\' && class_exists($class)) {

Check warning on line 235 in src/Util/Code.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "IncrementInteger": --- Original +++ New @@ @@ */ public static function new(string $class, array $arguments = []) : string { - if ($class[0] !== '\\' && class_exists($class)) { + if ($class[1] !== '\\' && class_exists($class)) { $class = '\\' . $class; } return self::call('new ' . $class, $arguments);
$class = '\\' . $class;
}

Expand Down Expand Up @@ -271,7 +279,7 @@
}

// Check if the expression is a variable
if (preg_match('/^\$[a-z][a-z0-9_]*$/i', $expression)) {

Check warning on line 282 in src/Util/Code.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "PregMatchRemoveFlags": --- Original +++ New @@ @@ return $fallback; } // Check if the expression is a variable - if (preg_match('/^\\$[a-z][a-z0-9_]*$/i', $expression)) { + if (preg_match('/^\\$[a-z][a-z0-9_]*$/', $expression)) { return "{$expression} instanceof \\{$className} ? {$expression} : {$fallback}"; } // If the expression is more complex, we need to generate a temporary variable

Check warning on line 282 in src/Util/Code.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "PregMatchRemoveCaret": --- Original +++ New @@ @@ return $fallback; } // Check if the expression is a variable - if (preg_match('/^\\$[a-z][a-z0-9_]*$/i', $expression)) { + if (preg_match('/\\$[a-z][a-z0-9_]*$/i', $expression)) { return "{$expression} instanceof \\{$className} ? {$expression} : {$fallback}"; } // If the expression is more complex, we need to generate a temporary variable
return "{$expression} instanceof \\{$className} ? {$expression} : {$fallback}";
}

Expand Down Expand Up @@ -352,7 +360,7 @@
private static function dumpObject(object $value): string
{
// @phpstan-ignore-next-line
$custom = self::$customObjectExpressions ??= [

Check warning on line 363 in src/Util/Code.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "AssignCoalesce": --- Original +++ New @@ @@ private static function dumpObject(object $value) : string { // @phpstan-ignore-next-line - $custom = self::$customObjectExpressions ??= [stdClass::class => fn(stdClass $value) => '(object) ' . self::dumpArray((array) $value), UnitEnum::class => fn(UnitEnum $value) => '\\' . get_class($value) . '::' . $value->name, DateTimeZone::class => fn(DateTimeZone $value) => self::new(DateTimeZone::class, [$value->getName()]), FieldError::class => fn(FieldError $value) => self::new(FieldError::class, [$value->message, $value->parameters, $value->code])]; + $custom = self::$customObjectExpressions = [stdClass::class => fn(stdClass $value) => '(object) ' . self::dumpArray((array) $value), UnitEnum::class => fn(UnitEnum $value) => '\\' . get_class($value) . '::' . $value->name, DateTimeZone::class => fn(DateTimeZone $value) => self::new(DateTimeZone::class, [$value->getName()]), FieldError::class => fn(FieldError $value) => self::new(FieldError::class, [$value->message, $value->parameters, $value->code])]; foreach ($custom as $class => $callback) { if ($value instanceof $class) { return $callback($value);

Check warning on line 363 in src/Util/Code.php

View workflow job for this annotation

GitHub Actions / Mutation Testing

Escaped Mutant for Mutator "Assignment": --- Original +++ New @@ @@ private static function dumpObject(object $value) : string { // @phpstan-ignore-next-line - $custom = self::$customObjectExpressions ??= [stdClass::class => fn(stdClass $value) => '(object) ' . self::dumpArray((array) $value), UnitEnum::class => fn(UnitEnum $value) => '\\' . get_class($value) . '::' . $value->name, DateTimeZone::class => fn(DateTimeZone $value) => self::new(DateTimeZone::class, [$value->getName()]), FieldError::class => fn(FieldError $value) => self::new(FieldError::class, [$value->message, $value->parameters, $value->code])]; + $custom = self::$customObjectExpressions = [stdClass::class => fn(stdClass $value) => '(object) ' . self::dumpArray((array) $value), UnitEnum::class => fn(UnitEnum $value) => '\\' . get_class($value) . '::' . $value->name, DateTimeZone::class => fn(DateTimeZone $value) => self::new(DateTimeZone::class, [$value->getName()]), FieldError::class => fn(FieldError $value) => self::new(FieldError::class, [$value->message, $value->parameters, $value->code])]; foreach ($custom as $class => $callback) { if ($value instanceof $class) { return $callback($value);
stdClass::class => fn(stdClass $value) => '(object) ' . self::dumpArray((array) $value),
UnitEnum::class => fn(UnitEnum $value) => '\\' . get_class($value) . '::' . $value->name,
DateTimeZone::class => fn(DateTimeZone $value) => self::new(DateTimeZone::class, [$value->getName()]),
Expand Down
29 changes: 29 additions & 0 deletions tests/DefaultFormFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use PHPUnit\Framework\TestCase;
use Quatrevieux\Form\Fixtures\ConfiguredLengthValidator;
use Quatrevieux\Form\Fixtures\SimpleRequest;
use Quatrevieux\Form\Fixtures\SimpleRequestConstructor;
use Quatrevieux\Form\Fixtures\TestConfig;
use Quatrevieux\Form\Fixtures\WithExternalDependencyConstraintRequest;
use Quatrevieux\Form\Util\Functions;
Expand Down Expand Up @@ -46,6 +47,34 @@ public function test_create()
$this->assertSame($form, $factory->create(SimpleRequest::class));
}

public function test_create_with_data()
{
$factory = DefaultFormFactory::runtime();
$form = $factory->create(SimpleRequest::class, ['foo' => 'aaaa']);

$this->assertInstanceOf(ImportedForm::class, $form);
$this->assertSame('aaaa', $form->value()->foo);
$this->assertFalse(isset($form->value()->bar));

$expected = new SimpleRequest();
$expected->foo = 'aaaa';
$expected->bar = 'bbbb';
$this->assertEquals($expected, $form->submit(['bar' => 'bbbb'])->value());
}

public function test_create_with_data_constructor()
{
$factory = DefaultFormFactory::runtime();
$form = $factory->create(SimpleRequestConstructor::class, ['foo' => 'aaaa']);

$this->assertInstanceOf(ImportedForm::class, $form);
$this->assertSame('aaaa', $form->value()->foo);
$this->assertFalse(isset($form->value()->bar));

$expected = new SimpleRequestConstructor('aaaa', 'bbbb');
$this->assertEquals($expected, $form->submit(['bar' => 'bbbb'])->value());
}

public function test_import()
{
$factory = DefaultFormFactory::runtime();
Expand Down
24 changes: 12 additions & 12 deletions tests/Transformer/Generator/FormTransformerGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,7 @@ function transformFromHttp(array $value): TransformationResult
$translator = $this->registry->getTranslator();

try {
$transformed['foo'] = (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformFromHttp($value['foo'] ?? null);
$transformed['foo'] = (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformFromHttp($value['foo'] ?? null);
} catch (\Quatrevieux\Form\Transformer\TransformerException $e) {
$errors['foo'] = $e->errors;
$transformed['foo'] = null;
Expand All @@ -520,23 +520,23 @@ function transformFromHttp(array $value): TransformationResult
function transformToHttp(array $value): array
{
return [
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformToHttp($value['foo'] ?? null),
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformToHttp($value['foo'] ?? null),
'bar' => $value['bar'] ?? null,
];
}

public function transformFieldFromHttp(string $fieldName, mixed $value): mixed
{
return match ($fieldName) {
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformFromHttp($value),
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformFromHttp($value),
'bar' => $value,
};
}

public function transformFieldToHttp(string $fieldName, mixed $value): mixed
{
return match ($fieldName) {
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformToHttp($value),
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformToHttp($value),
'bar' => $value,
};
}
Expand Down Expand Up @@ -758,7 +758,7 @@ function transformFromHttp(array $value): TransformationResult
$translator = $this->registry->getTranslator();

try {
$transformed['foo'] = (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformFromHttp($value['foo'] ?? null);
$transformed['foo'] = (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformFromHttp($value['foo'] ?? null);
} catch (\Quatrevieux\Form\Transformer\TransformerException $e) {
$errors['foo'] = $e->errors;
$transformed['foo'] = null;
Expand All @@ -768,7 +768,7 @@ function transformFromHttp(array $value): TransformationResult
}

try {
$transformed['bar'] = (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformFromHttp($value['bar'] ?? null);
$transformed['bar'] = (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformFromHttp($value['bar'] ?? null);
} catch (\Exception $e) {
$transformed['bar'] = $value['bar'] ?? null;
}
Expand All @@ -779,24 +779,24 @@ function transformFromHttp(array $value): TransformationResult
function transformToHttp(array $value): array
{
return [
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformToHttp($value['foo'] ?? null),
'bar' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformToHttp($value['bar'] ?? null),
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformToHttp($value['foo'] ?? null),
'bar' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformToHttp($value['bar'] ?? null),
];
}

public function transformFieldFromHttp(string $fieldName, mixed $value): mixed
{
return match ($fieldName) {
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformFromHttp($value),
'bar' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformFromHttp($value),
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformFromHttp($value),
'bar' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformFromHttp($value),
};
}

public function transformFieldToHttp(string $fieldName, mixed $value): mixed
{
return match ($fieldName) {
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformToHttp($value),
'bar' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer(transformerException: false))->transformToHttp($value),
'foo' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformToHttp($value),
'bar' => (new \Quatrevieux\Form\Transformer\Generator\FailingTransformer())->transformToHttp($value),
};
}
}
Expand Down
4 changes: 2 additions & 2 deletions tests/Util/CodeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ public function test_value()
$this->assertSame("['foo', 123]", Code::value(['foo', 123]));
$this->assertSame("['foo' => 123, 'bar' => 456]", Code::value(['foo' => 123, 'bar' => 456]));
$this->assertSame("(object) ['foo' => 'bar']", Code::value((object) ['foo' => 'bar']));
$this->assertSame("new \Quatrevieux\Form\Transformer\Field\Csv(separator: ';', enclosure: '')", Code::value(new Csv(separator: ';')));
$this->assertSame("new \Quatrevieux\Form\Transformer\Field\Csv(separator: ';')", Code::value(new Csv(separator: ';')));
$this->assertSame("\Quatrevieux\Form\Transformer\Field\CastType::Int", Code::value(CastType::Int));
$this->assertSame("[new \Quatrevieux\Form\Transformer\Field\Csv(separator: ';', enclosure: ''), new \Quatrevieux\Form\Transformer\Field\ArrayCast(elementType: \Quatrevieux\Form\Transformer\Field\CastType::Int, preserveKeys: true)]", Code::value([new Csv(separator: ';'), new ArrayCast(CastType::Int)]));
$this->assertSame("[new \Quatrevieux\Form\Transformer\Field\Csv(separator: ';'), new \Quatrevieux\Form\Transformer\Field\ArrayCast(elementType: \Quatrevieux\Form\Transformer\Field\CastType::Int)]", Code::value([new Csv(separator: ';'), new ArrayCast(CastType::Int)]));
$this->assertSame('$foo', Code::value(Code::raw('$foo')));
$this->assertSame('new \DateTimeZone(\'Europe/Paris\')', Code::value(new \DateTimeZone('Europe/Paris')));
}
Expand Down
4 changes: 2 additions & 2 deletions tests/View/GeneratedFormViewInstantiatorFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -233,12 +233,12 @@ class Quatrevieux_Form_Fixtures_WithChoiceRequestViewGeneratorTesting implements

function submitted(array $value, array $errors, ?string $rootField = null): Quatrevieux\Form\View\FormView
{
return $rootField === null ? new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView('value', $value['value'] ?? null, ($__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e = $errors['value'] ?? null) instanceof \Quatrevieux\Form\Validator\FieldError ? $__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e : null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404], message: 'The value is not a valid choice.'))->choiceViews($value['value'] ?? null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], $value) : new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView("{$rootField}[value]", $value['value'] ?? null, ($__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e = $errors['value'] ?? null) instanceof \Quatrevieux\Form\Validator\FieldError ? $__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e : null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404], message: 'The value is not a valid choice.'))->choiceViews($value['value'] ?? null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], $value);
return $rootField === null ? new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView('value', $value['value'] ?? null, ($__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e = $errors['value'] ?? null) instanceof \Quatrevieux\Form\Validator\FieldError ? $__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e : null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404]))->choiceViews($value['value'] ?? null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], $value) : new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView("{$rootField}[value]", $value['value'] ?? null, ($__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e = $errors['value'] ?? null) instanceof \Quatrevieux\Form\Validator\FieldError ? $__tmp_5c3b6fd1a41b45355826d3a33c0e6c6e : null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404]))->choiceViews($value['value'] ?? null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], $value);
}

function default(?string $rootField = null): Quatrevieux\Form\View\FormView
{
return $rootField === null ? new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView('value', null, null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404], message: 'The value is not a valid choice.'))->choiceViews(null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], []) : new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView("{$rootField}[value]", null, null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404], message: 'The value is not a valid choice.'))->choiceViews(null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], []);
return $rootField === null ? new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView('value', null, null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404]))->choiceViews(null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], []) : new \Quatrevieux\Form\View\FormView('Quatrevieux\\Form\\Fixtures\\WithChoiceRequest', ['value' => (new \Quatrevieux\Form\View\FieldView("{$rootField}[value]", null, null, []))->choices((new \Quatrevieux\Form\Choice\Choice(choices: ['The answer' => 42, 'The beast' => 666, 'Lost' => 404]))->choiceViews(null, $this->transformer->fieldTransformer('value'), $this->registry), $this->registry->getTranslator())], []);
}

public function __construct(
Expand Down
Loading
Loading