Skip to content

Type les callbacks en Closure plutôt qu'en callable#15

Open
gototog wants to merge 1 commit into
kibatic:mainfrom
gototog:closure-instead-of-callable
Open

Type les callbacks en Closure plutôt qu'en callable#15
gototog wants to merge 1 commit into
kibatic:mainfrom
gototog:closure-instead-of-callable

Conversation

@gototog

@gototog gototog commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

callable n'étant pas un type de propriété valide, les cinq propriétés qui stockaient un callback (Column::$value, Column::$sortableQuery, Filter::$callback, GridBuilder::$rowAttributesCallback et Grid::$rowAttributesCallback) étaient non typées : le type était vérifié à l'entrée puis perdu au stockage.

Les typer en Closure supprime aussi les is_callable() qui départageaient les unions string|callable. Sur sortableQuery, cette distinction était un piège : is_callable('date') vaut true, donc une colonne déclarée sortableQuery: 'date' serait partie dans la branche callback au lieu d'être triée.

BC break : les callables autres que des Closure ([$objet, 'methode'], 'nom_de_fonction') ne sont plus acceptés par addColumn(), addFilter(), setRowAttributesCallback() ni par les constructeurs de Column, Filter et Grid. Les envelopper avec Closure::fromCallable() ou la syntaxe first-class $callback(...).

callable n'étant pas un type de propriété valide, les cinq propriétés qui
stockaient un callback (Column::$value, Column::$sortableQuery,
Filter::$callback, GridBuilder::$rowAttributesCallback et
Grid::$rowAttributesCallback) étaient non typées : le type était vérifié à
l'entrée puis perdu au stockage.

Les typer en Closure supprime aussi les is_callable() qui départageaient les
unions string|callable. Sur sortableQuery, cette distinction était un piège :
is_callable('date') vaut true, donc une colonne déclarée sortableQuery: 'date'
serait partie dans la branche callback au lieu d'être triée. Le DQL étant en
pratique toujours préfixé (c.date), le cas ne s'est jamais produit.

BC break : les callables autres que des Closure ([$objet, 'methode'],
'nom_de_fonction') ne sont plus acceptés par addColumn(), addFilter(),
setRowAttributesCallback() ni par les constructeurs de Column, Filter et Grid.
Les envelopper avec Closure::fromCallable() ou la syntaxe first-class
$callback(...).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant