Skip to content

Bug: Field::make() gebruikt new self() — HasOneField/ViewField breken #142

Description

@ginkelsoft-development

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

  • `HasOneField::make('x')` returnt een `HasOneField`
  • `ViewField::make('first_name')` heeft niet-lege label ("First Name")
  • FieldContractTest groen voor alle 23 types zonder skips
  • Geen regressie in bestaande tests

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions