Probleem
src/Fields/Field.php regel 56-58:
```php
public static function make(string $name, ?string $label = null, string $type = 'text'): self
{
return new self($name, $label, $type);
}
```
`new self()` gebruikt geen late static binding. Bij field types die GEEN eigen `make()` definiëren, wordt een base `Field` geretourneerd — niet de subclass.
Impact
Ontdekt via FieldContractTest:
- HasOneField::make('x') returnt een `Field`, niet een `HasOneField`. Volgende chained calls vallen terug op de base Field methods, dus type-specifieke gedrag (relatedTo, setParentModel) is na een chain niet meer beschikbaar.
- ViewField::make('first_name') krijgt default `?string $label = ''` (lege string i.p.v. null) — daardoor wordt de auto-label-derivation overgeslagen en blijft het label leeg.
Fix
Optie A (minimaal): wijzig `new self` naar `new static` in `Field::make()`. Dit lost HasOneField op.
Optie B (volledig): voeg `make()` toe op HasOneField (zoals alle andere relation fields al hebben) + wijzig ViewField default `$label = ''` naar `$label = null`.
Aanbevolen
Beide. `new static` voor robuustheid + expliciete `make()` overrides waar nuttig.
Acceptatiecriteria
Probleem
src/Fields/Field.phpregel 56-58:```php
public static function make(string $name, ?string $label = null, string $type = 'text'): self
{
return new self($name, $label, $type);
}
```
`new self()` gebruikt geen late static binding. Bij field types die GEEN eigen `make()` definiëren, wordt een base `Field` geretourneerd — niet de subclass.
Impact
Ontdekt via FieldContractTest:
Fix
Optie A (minimaal): wijzig `new self` naar `new static` in `Field::make()`. Dit lost HasOneField op.
Optie B (volledig): voeg `make()` toe op HasOneField (zoals alle andere relation fields al hebben) + wijzig ViewField default `$label = ''` naar `$label = null`.
Aanbevolen
Beide. `new static` voor robuustheid + expliciete `make()` overrides waar nuttig.
Acceptatiecriteria