Skip to content

Releases: wol-soft/php-json-schema-model-generator

Rework Exceptions

25 Jun 15:00
efc32a5
Compare
Choose a tag to compare

Backward incompatible changes

Fixed immutable classes default value (issue #7)

The default value for immutable was documented as true but was set to false. Now the default value is true. If you rely on setters being generated but haven't explicitly set the option on your GeneratorConfiguration you can simply set the option for immutable classes to false:

new Generator(
    (new GeneratorConfiguration())
        ->setImmutable(false)
);

Dropped setExceptionClass option

As errors are thrown as specific exceptions now the option to set a custom exception class for the early-return mode has been removed. A custom ErrorRegistryException for collecting validation errors can still be added

Changed ErrorRegistryExceptionInterface

As the internal errors which are collected in an ErrorRegistryException are now passed as ValidationExceptions and not as strings the interface for ErrorRegistryExceptions has been updated. If you provide a custom ErrorRegistryException you must update your implementation to follow the interface.

The method getErrors now returns an array of validation errors instead of a string array providing access to the collected errors.

The result of ErrorRegistryException->getMessage() hasn't been changed

Changed signature of toJSON and toArray

If you use the $options or $depth parameter of the toJSON or toArray method you must add the $except parameter which is now the first parameter of both functions (docs)

Features

Reworked exceptions

Instead of strings the internal errors are now specific exceptions implemented in the wol-soft/php-json-schema-model-generator-production repository. Each validation violation now has a dedicated exception implementation with additional data instead of a simple string (compare the docs for more details on which exceptions provide which data).

All exceptions, including the ErrorRegistryException now provide a toJSON and a toArray method for serialization and implement the PHP builtin interface JsonSerializable which allows the exceptions to be passed directly into json_encode.

Except for serialization methods

The serialization methods now provide an $except parameter to define properties which must'nt be serialized (eg. a password property for an user) (docs)

Bugfixes

  • Skip filters after a failing transforming filter to avoid irrelevant additional errors due to type incompatibilities (PR #9)

Bugfix

18 Jun 14:30
Compare
Choose a tag to compare

Bugfixes

  • Custom serializer methods from transforming filters are added multiple times if the filter gets applied to a multi type property

Explicit null

18 Jun 10:16
7ea0042
Compare
Choose a tag to compare

Backward incompatible changes

The models were generated with an implicit null acceptance for optional object properties (eg. an optional string value would also pass the validation if the property is present and contains null). This behaviour is not according to the JSON-Schema standard. Consequently now by default an explicit null type is required to accept null (eg. your property has a multi type ["string", "null"]). With a newly added option on your GeneratorConfiguration you can enable implicit null acceptance to get the old behaviour. View the docs for more details on the implicit null option.

new Generator(
    (new GeneratorConfiguration())
        ->setImplicitNull(true)
);

Features

  • By default the properties now require an explicit definition of null acceptance via a multi type (eg. ["string", "null"]). A new option on the GeneratorConfiguration allows implicit null acceptance for optional object properties (docs)
  • Models can be initialized without providing an array. The $modelData parameter now defaults to an empty array. All properties will be validated against the empty array when initializing a new model without providing data.
  • If serialization is enabled the generated model will implement the PHP builtin JsonSerializable interface so the model can be passed to json_encode (docs)
  • The builtin dateTime filter now accepts PHPs builtin constants for formatting options (docs)

Bugfixes

  • In a filter chain containing a transforming filter the filters after the transforming filter are now type checked against transformed type instead of the base type
  • transforming filters applied to a multi type property must accept each of the defined types on the property
  • don't execute enum validation for values with a fransforming filter if the provided value is already transformed

Advanced filters and Schema Providers

13 Jun 12:34
3abfeb6
Compare
Choose a tag to compare

Backward incompatible changes

As the JSON schemas are fetched via a provider now you have to change your model generator script. To get the old behaviour simply add the RecursiveDirectoryProvider:

Change from:

(new Generator())
    ->generateModels(__DIR__ . '/schema', __DIR__ . '/result');

to:

(new Generator())
    ->generateModels(new RecursiveDirectoryProvider(__DIR__ . '/schema'), __DIR__ . '/result');

Features

  • Fetch JSON schemas via a provider implementation allowing different sources for object schemas than a folder structure containing the objects as separate .json files
  • Added an Open API v3 schema provider which accepts an Open API v3 json file and converts all models located at #/components/schemas into PHP models (docs)
  • Added additional builtin filters
    • notEmpty filter: Removes empty elements from a provided array (docs)
    • dateTime filter: converts a DateTime compatible string into a DateTime object (docs)
  • Advanced filter logic
    • Filter may be applied to an array
    • Added transforming filter. A transforming filter takes the provided value and transforms the value into another type. The transformed type will be reflected as property type into the generated model (docs). A transforming filter for example may be used to initialize an object with a provided string (eg. date string into DateTime object). Properties with a transforming filter also accept an already transformed value (eg. the property with a DateTime filter also accepts a DateTime object).
    • Added filter options. A filter now may accept additional options which define the behaviour of the filter (docs)

Bugfixes

  • If multiple filters are applied to a single property they will now be executed in the order of their appearance in the JSON Schema

Internal

  • Moved serialization functionality into a trait to reduce code duplication

Dependencies

05 Jun 16:03
Compare
Choose a tag to compare

Features

  • Added depth parameter to serialization methods (docs)
  • Allow base references (docs)
  • Added Property Dependencies (docs)
    • Require a list of properties to be present based on the presence of a property
  • Added Schema Dependencies (docs)
    • Dependency to an object schema based on the presence of a property
    • Dependency to a composition schema based on the presence of a property
    • Dependency to a schema reference referring to either an object or a composition based on the presence of a property

Update ECS dependency

12 Mar 15:17
Compare
Choose a tag to compare
0.11.1

Fix typos

General Interface

10 Mar 15:32
Compare
Choose a tag to compare
  • Each generated class now implements the JSONModelInterface

Fix class scope

06 Mar 09:00
Compare
Choose a tag to compare
0.10.1

Fix class scope

Added filter

05 Mar 20:08
Compare
Choose a tag to compare

Unify Namespaces

02 Mar 13:38
Compare
Choose a tag to compare

BREAKING CHANGES
The namespaces of the generator library and the library holding all code required to run the generated code are now both PHPModelGenerator. The package which holds the code required to run the generated code is now located at wol-soft/php-json-schema-model-generator-production (previous package wol-soft/php-json-schema-model-generator-exception is deprecated).

To update simply change the require to the new package and change all old namespaces from that package (PHPModelGeneratorException\ becomes PHPModelGenerator\Exception\).

Additionally all classes generated with serialization enabled now implement the interface PHPModelGenerator\Interfaces\SerializationInterface