Skip to content

Add data traits and interfaces - #385

Merged
giuscris merged 3 commits into
2.xfrom
feature/data-traits-and-interfaces
Nov 5, 2022
Merged

Add data traits and interfaces#385
giuscris merged 3 commits into
2.xfrom
feature/data-traits-and-interfaces

Conversation

@giuscris

@giuscris giuscris commented Nov 5, 2022

Copy link
Copy Markdown
Member

This PR changes how Formwork handles data classes, using traits and interfaces to add and enforce behavior.

All the new traits enforce a $data as:

protected array $data = [];

New interfaces

  • Arrayable used in classes that export data to arrays
  • ArraySerializable enforces a static method fromArray() to generate class instances, will be used in future in Formwork\Parsers\PHP

New traits

  • DataArrayable implements toArray() method returning $data as an array, required by聽Arrayable
  • DataCountable implements a count() method returning the count of $data, required by \Countable interface (see https://www.php.net/manual/en/class.countable.php)
  • DataIterator implements an iterator on $data elements, required by \Iterator interface (see https://www.php.net/manual/en/class.iterator.php)
  • DataCountableIterator is a composition of DataCountable and DataIterator
  • DataGetter implements has()聽and get() methods
  • DataSetter聽implements set() and remove() methods
  • DataMultipleGetter implements hasMultiple() and getMultiple() extending DataGetter
  • DataMultipleSetter implements setMultiple() and removeMultiple() extending DataSetter

@giuscris giuscris added the enhancement New feature or request label Nov 5, 2022
@giuscris giuscris added this to the 2.0.0 milestone Nov 5, 2022
@giuscris
giuscris merged commit 4b62958 into 2.x Nov 5, 2022
@giuscris
giuscris deleted the feature/data-traits-and-interfaces branch November 5, 2022 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant