All notable changes to laravel-data
will be documented in this file.
- Fix an issue where the cache structures command did not work if the directory did not exist (#892)
- feat: support "null to optional" by @innocenzi in #881
- Register optimize commands by @erikgaal in #880
Full Changelog: https://github.com/spatie/laravel-data/compare/4.10.1...4.11.0
- Fix an issue where optional default values would disable validation
It has been a fews weeks, a mostly bugfix release with one new feature, enjoy!
- Fix an issue where required rules could not be combined with optional (#844)
- Fix Livewire return type to make sure it can return everything in the data object (#836)
- Fix issue where validation messages where ignored by collections nested in collections (#867)
- Fix Resource to include Contextable data inteface (#868)
- Stop NormalizedModel from initializing itself and try to lazy load properties when required (#870)
- Passing an enum to caster handle without an error (#841)
- Passing date objects to caster handle without an error (#842)
- Allow setting a default mapping strategy (#846)
- Move some interfaces around in order to avoid a circular chaos
- Remove a circular dependency
- Fix a missing dependency
- Detect data from collection by @clementbirkle in #812
- Fix an issue where dd or dump did not work
Full Changelog: https://github.com/spatie/laravel-data/compare/4.7.2...4.8.0
- Fix issue where an exception was not always thrown while it should (#809)
- Solve an issue where an empty container with an iterable cast won't be cast (#810)
- Fix Parsing of Optional Types Annotations in DataIterableAnnotation (#808)
- Support TypeScript Hidden Properties (#820)
- Fix issue where abstract eloquent casts were not encrypted(#828)
- Fix some typos in docs by @Klaas058 in #794
- Provide a default timezone for casting date by @PhilippeThouvenot in #799
- Remove object rule caching
- Fix an issue where a normalized model attribute fetching a relation would not use the loaded relation
- @PhilippeThouvenot made their first contribution in #799
Full Changelog: https://github.com/spatie/laravel-data/compare/4.7.0...4.7.1
- Fix typo in docs by @DvDty in #769
- Update wrapping.md by @kimulisiraj in #770
- Fix typos on "Use with Livewire" page by @vkarchevskyi in #777
- Fix dataCastUsing method signature by @shankhadevpadam in #781
- Avoid loading already loaded relations and allow loading non studly relation names by @Tofandel in #773
- Fix routing parameters filled in incorrectly using mapping property names by @guiqibusixin in #775
- Feature: add ability to store eloquent casts as an encrypted string by @eugen-stranz in #723
- @DvDty made their first contribution in #769
- @vkarchevskyi made their first contribution in #777
- @shankhadevpadam made their first contribution in #781
- @guiqibusixin made their first contribution in #775
- @eugen-stranz made their first contribution in #723
- @yob-yob made their first contribution in #776
Full Changelog: https://github.com/spatie/laravel-data/compare/4.6.0...4.7.0
- Add initial support for casting union types
- Fix an issue with paginator includes not working
- Fix consistency of After, AfterOrEqual, Before, BeforeOrEquals rules
- Fix creation context issue (#749)
- Fix an performance issue where when creating a data object from models, the attributes were always called
- Add a #[LoadRelation] attribute which allows loading model relations when creating data objects on the fly
Full Changelog: https://github.com/spatie/laravel-data/compare/4.5.1...4.6.0
- Backport cache fix to v3 by @jameshulse in #671
- fix: adds environment variable to disable structure caching by @jaydublu2002 in #645
- v3 support for Laravel 11 by @jameshulse in #739
Full Changelog: https://github.com/spatie/laravel-data/compare/4.5.1...3.12.0
- Abstract data object as collection by @onursimsek in #741
Full Changelog: https://github.com/spatie/laravel-data/compare/4.5.0...4.5.1
- Cast value to string for createFromFormat by @kylekatarnls in #707
- fix: avoid mutation during
DataCollectable
transformation by @innocenzi in #696 - Add new section to the docs for package testing by @adam-code-labx in #711
- Change default cache variable by @Elnadrion in #717
- Improve performance of CastPropertiesDataPipe by using hash lookups instead of ->first by @LauJosefsen in #721
- Change method of creating object without magic methods by @daveroverts in #725
- Upgrade to inertia 1.0 by @kimulisiraj in #726
- Allow to pass multiple formats to Laravel's
date_format
rule by @riesjart in #727 - Add attribute for Laravel's
list
validation rule by @riesjart in #728 - chore(deps): bump dependabot/fetch-metadata from 1.6.0 to 2.0.0 by @dependabot in #718
- Update creating-a-cast.md by @AlexRegenbogen in #724
- Fix wrong link to using attributes page by @BernhardK91 in #733
- Add better support for serializing data by @rubenvanassche in #735
- Fix for the use of built-in class names in Collection annotations by @27pchrisl in #736
- Adds a config option to silently ignore when a Computed Property is being set by @erikaraujo in #714
Full Changelog: https://github.com/spatie/laravel-data/compare/4.4.1...4.5.0
- fix issue where DataCollection keys were missing in TypeScript by @rubenvanassche
Full Changelog: https://github.com/spatie/laravel-data/compare/4.4.0...4.4.1
- Add support for transformation max depths by @rubenvanassche in #699
Full Changelog: https://github.com/spatie/laravel-data/compare/4.3.2...4.4.0
- Provide fallbacks for config values by @sebastiandedeyne in #695
Full Changelog: https://github.com/spatie/laravel-data/compare/4.3.1...4.3.2
- Support duration in cache configuration by @sebastiandedeyne in #694
- Handle
null
forfieldContext
withinresolvePotentialPartialArray
by @faustbrian in #693
Full Changelog: https://github.com/spatie/laravel-data/compare/4.3.0...4.3.1
- Update wrapping.md to clarify collections and paginated collections case by @santigarcor in #675
- Feature/cast and transformer iterables by @rubenvanassche in #686
- Add support for passing on partials when not transforming values by @rubenvanassche in #688
- chore(deps): bump ramsey/composer-install from 2 to 3 by @dependabot in #678
- Allow data context to be set to null by @sebastiandedeyne in #691
- Fix iterable casts when there's a global and local cast specified by @sebastiandedeyne in #690
- Fix iterable values with union types by @sebastiandedeyne in #692
Full Changelog: https://github.com/spatie/laravel-data/compare/4.2.0...4.3.0
- Add experimental support for Livewire synths @rubenvanassche in #669
- Add DataCollectionSynth by @edalzell in #591
Full Changelog: https://github.com/spatie/laravel-data/compare/4.1.0...4.2.0
- fix: adds environment variable to disable structure caching (#645)
- Backport cache fix to v3 by @jameshulse in #671
Full Changelog: https://github.com/spatie/laravel-data/compare/3.11.0...3.11.1
- Fix an issue where the cache was queried too much
- Move the creation process of object rules from constructor to
getRule
to fix issues with caching and typescript transformer - Laravel 11 support
- Fixes issue where casts could not return
null
or an empty array - Prevent out of memory with multiple requests in a test (#665)
- Allow passing
null
tocollect
and return an empty version of the defined output type - Fix templates for Laravel Idea plugin support (#666)
- Fix an issue where the cache could not be disabled
Laravel-data 4.0.0 was released 5 hours ago, time for an update!
- Add support for a collection cast
- Make sure we check wether a value is Uncastable
- Fix issue where creating a data object from multiple payloads wasn't always consistent
- Allow disabling cache
- Refactor
PropertyRules
- Fix issue where install on windows was impossible
- Fix types for map and through (#640)
- Allow arrays, Collections, Paginators, ... to be used as DataCollections
- Add support for magically creating data collections
- Rewritten transformation system with respect to includeable properties
- Addition of collect method
- Removal of collection method
- Add support for using Laravel Model attributes as data properties
- Allow creating data objects using
from
without parameters - Add support for a Dto and Resource object
- It is now a lot easier to validate all the payloads added to laravel-data
- Added contexts to the creation and transformation process
- Allow creating a data object or collection using a factory
- Speed up the process of creating and transforming data objects
- Add support for BNF syntax
- Laravel 10 requirement
- Rewritten docs
Some more "internal" changes
- Restructured tests for the future we have ahead
- The Type system was completely rewritten, allowing for a better performance and more flexibility in the future
- Benchmarks added to make data even faster
- Add support for data structure caching #622
- Make ValidationPath Stringable
- Fix PHPStan
- Improve performance when optional property exists (#612)
A fresh release after a month of vacation, enjoy!
- Add ExcludeWith validation rule (#584)
- Add DoesntEndWith and DoesntStartWith validation rules (#585)
- Add MinDigits and MaxDigits validation rules (#586)
- Add DataCollection reject() method (#593)
- Add generic type for WithData trait (#597)
- Fix issue where non set optional values were transformed (#602)
- Fix issue where parameters passed to Laravel Collection methods would sometimes provide alternative results (issue: #607)
- MimeTypes validation fix on v1 (#596)
- Fix breaking compatibility #590
- Add Declined and DeclinedIf validation attributes (#572)
- Add MacAddress validation attribute (#573)
- Add RequiredArrayKeys validation attribute (#574)
- Support Arrayable when casting to DataCollection (#577)
- Fetch attributes from parent classes to allow reusability (#581)
- Fix issue where non-set optional values would be transformed
- Fix an issue where computed values could not be set as null
- Fix for no rules created on optional|nullable Data object and Collection (#532)
- Add
CustomValidationAttribute
's - Copy partial trees when using array access on a collection
- fix abstract json cast format
- Add Hidden Attribute (#505)
- Add Null value support for RequiredUnless Validation (#525)
- Add abstract eloquent casts (#526)
- fix target namespace when creating files with Laravel Idea (#497)
- allow collection to be created passing null (#507)
- add Ulid validation rule (#510) -add TARGET_PARAMETER to Attribute for improved Validation (#523)
- Add support for better exception messages when parameters are missing
- Fix default properties generating validation rules when not provided
- Add last() method on DataCollection (#486)
- Add new manual written present attribute rule always overwrites a generated required rule
- Added the ability to create data files, casts, transformers and rules using Laravel Idea plugin #485
- Add some config options to the
make:data
command (#449, #335)
- Add laravel v10 support
- Add ability to instantiate an eloquent cast when null value using null database values (#425)
- Revert only use validated data (#438) -> see #432
- Add support for computed values
- Add merge method to Data Collections (#419)
- Allow field references in same validation attribute
- Generic return type of toResponse function (#437)
- Only use validated data (#438)
- Add missing constructor parameters to error message (#433)
- Make Lazy Macroable
- Update TypeScript Transformer with new closure lazy type
- Add support for Lazy Closures which can be used with inertia
- reverted the reverted #393 branch
- Allow to fetch Lazy data properties in unified way (#403)
- revert: Fix usage of properties' mapped output names in 'only', 'except', 'includes', and 'excludes' operations (#393)
- Fix issue when validating and creating a data object was impossible to use magic creation methods
- Fix usage of properties' mapped output names in 'only', 'except', 'includes', and 'excludes' operations (#393)
- Add some extra documentation
- Introduce FormRequestNormalizer (#380)
- Add support for models without all columns (#385)
- Add benchmarks for testing data performance
- Add some performance improvements for data creation and transformation
- Performance improvements
- Fix issue where promoted protected constructor parameters were seen as possible property canidates
- Allow using closures within the with method (#372)
- Add support for Validation Rule Contract in Rule rule (#362)
- Allow laravel-data validation rules to be used in Laravel validator (#375)
- Add WithCastable attribute (#349)
- Quote non-standard object keys when transforming to Typescript (#367)
- Allow filling props from route parameters (#341)
- Better handing of custom regex validation rules(#342)
- Fix types (#348)
- Improve validation when strings are passed for nested data objects
- Add FieldReference to Before and After Validation attribute (#345)
- The validation logic is completely rewritten
- Add support for nested nullable and optional data objects
- Allow referencing other fields in validation attributes when the data is nested
- Allow referencing url parameters (and even model properties) in validation attributes
- Allow circular dependencies when validating data
- Add support for nested validation messages and attributes
- Package specific properties are renamed to avoid conflicts
- Serialization logic updated to only serialize your properties
- Prevent fatal error when passing a string containing only an integer to JSON Normalizer (#322)
- Ignore leading ! in DateTimeInterfaceTransformer (#325)
- Extend the make:data command to be more flexible (#335)
- Add Laravel 10.x support (#331)
- Add a way to prepend DataPipes to the pipeline (#305)
- Better IDE completion (#307)
- Make eloquent collection cast respect collection (#308)
- fix support to return 201 status code in Json Responses (#291)
- Add generic return type for DataCollection::toCollection (#290)
- Improve ide.json completion (#294)
- Pass in payload relative to the data object when generating rules (#264)
- ignore phpstorm attributes when instantiating and add readonly property (#281)
- Stop using custom pipeline when creating data magically from requests
- set timezones in datetime casts (#287 )
- add support for optional properties in TypeScript transformer (#153)
- refactor test suite to Pest (#239)
- update the docs
- add a
StudlyMapper
- add better support for Livewire
- accept 'float' as data type (#237)
- fix typo in mime type validation rule(#243)
- add support for enums in validation attributes
- add support for withoutTrashed to exists validation attribute (#248)
- add PHP 8.2 testing in GH actions
- add ability to modify properties before the data pipeline (#247)
- fix first and last page url are never null (#215)
- add ability to statically retrieve a data models rules (#221)
- improved pattern matching in DataCollectionAnnotationReader (#225)
- add ExcludeWithout attribute rule (#230)
- improve getValidationRules to also retrieve wildcard rules (#231)
- return property with or without mapping the name (#199)
- Improve pattern matching in DataCollectionAnnotationReader (#214)
- Add ability to retrieve rules for a data object (#221)
- Use generics with Data::collection (#213)
- Improve pattern matching in DataCollectionAnnotationReader (#214)
- Fix TypeScript Transformer paginated collections, first and last page url are never null (#215)
- Add support for a JsonSerializer
- Fix generic iterator definition for data collections
- Fix validation of DataCollection objects not working as expected
- Add support for timezone manipulation in casts and transformers (#200)
- use AbstractCloner instead of reflection (#196)
- Add var dumper caster (#195)
- Allow direct pipeline call (#193)
- Rename ArrayableNormalizer (#191)
- Make normalizers configurable (#190)
- Add cast lazy condition result to bool (#186)
- Add conditional return types for collections (#184)
- Fix windows tests
- Fix validation rules not being used for data collections and objects
- Add IDE completion support (#182)
- Add support for invokable rules (#179)
- more consistent use of transform through codebase for transforming collections and data
- Add class defined partials (#164)
- Use mapped property names in TypeScript (#154)
- Add make:data command (#157)
- Better support for overwritten rules
- Add support for Lazy inertia props (#163)
- Add support for array query parameters as partials (#162)
Version 2 of laravel-data is a complete overhaul, we've almost completely rewritten the package.
This is a (non-complete) list of the new features:
- A DataPipeline
- Data normalizers
- Mappable property names
- Wrapping of data in responses
only
andexcept
methods on Data and DataCollections- Multiple parameter magic methods
- Optional properties
- Split DataCollections
- Better support for TypeScript Transformer
- And a lot more ...
- Fix optional parameters (#152)
- Use protected properties and methods (#147 )
- add values() on DataCollection by @Nielsvanpach in #135
- @Nielsvanpach made their first contribution in #135
Full Changelog: https://github.com/spatie/laravel-data/compare/1.4.7...1.5.0
- support $payload as a dependency in rules (#123)
- Add Dependency Injection for rules, messages, and attributes methods (#114)
- Add support for stdClass payload casting (#106)
- use present validation rule instead of required for data collections
- allow using default password config in password validation attribute (#94)
- solve binding issues on Laravel Octane (#101)
- fixes a bug where models nested by relation could not be created due to date casts
- add a
links
array to the paginated response - stop execution of
lazy::whenLoaded
closure when the relation isnull
- fix for aborting value assignment after a false boolean (#80)
- add a
WithoutValidation
attribute - allow transformers to target native types, data collections and data objects
- Allow transformers to target Data and DataCollections
- removes checks for built in types and
isBuiltIn
fromDataProperty
- add better support for defaults
- Laravel 9.x by @aidan-casey in #77
- Removes Spatie's Laravel Enums from dev requirements by @aidan-casey in #76
- @aidan-casey made their first contribution in #77
Full Changelog: https://github.com/spatie/laravel-data/compare/1.3.2...1.3.3
- add support for json_encode to Data objects
- add support for json_encode to DataCollection objects
- add basic support for intersection types
- allow casting of built in PHP types
- add support for inferring enum rules
- fix an issue where an Enum validation attribute would not work
- fixes the RequiredRuleResolver to support custom rules like
Enum
- add an Enum validation rule attribute
- rename the
authorized
method toauthorize
- disable the behavior were excluded conditional properties still could be included
- fix return type notice message
- fixes an issue where data object could not be created when it had lazy nested data object
- fixes windows test suite
- when creating data objects, we now will always run validation when a
Request
object is given not only when a data object is injected - removal of
DataFromRequestResolver
- added
DataValidatorResolver
- change data property types collection checking procedure
- move
spatie/test-time
dependency to require-dev - expand support for nested data object creation (#19)
- expand support for annotating data collections
- revert allow ignoring with a closure within a unique rule
- allow ignoring with a closure within a unique rule
- add a
WithData
trait for quicker getting data from objects
- fix required rules being added when not allowed
- initial release