PHP code example of spiral / json-schema-generator
1. Go to this page and download the library: Download spiral/json-schema-generator library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
spiral / json-schema-generator example snippets
namespace App\DTO;
use Spiral\JsonSchemaGenerator\Attribute\Field;
class Movie
{
public function __construct(
#[Field(title: 'Title', description: 'The title of the movie')]
public readonly string $title,
#[Field(title: 'Year', description: 'The year of the movie')]
public readonly int $year,
#[Field(title: 'Description', description: 'The description of the movie')]
public readonly ?string $description = null,
public readonly ?string $director = null,
#[Field(title: 'Release Status', description: 'The release status of the movie')]
public readonly ?ReleaseStatus $releaseStatus = null,
) {
}
}
namespace App\DTO;
enum ReleaseStatus: string
{
case Released = 'Released';
case Rumored = 'Rumored';
case PostProduction = 'Post Production';
case InProduction = 'In Production';
case Planned = 'Planned';
case Canceled = 'Canceled';
}
use Spiral\JsonSchemaGenerator\Generator;
use App\DTO\Movie;
$generator = new Generator();
$schema = $generator->generate(Movie::class);
[
'properties' => [
'title' => [
'title' => 'Title',
'description' => 'The title of the movie',
'type' => 'string',
],
'year' => [
'title' => 'Year',
'description' => 'The year of the movie',
'type' => 'integer',
],
'description' => [
'title' => 'Description',
'description' => 'The description of the movie',
'oneOf' => [
['type' => 'null'],
['type' => 'string'],
],
],
'director' => [
'oneOf' => [
['type' => 'null'],
['type' => 'string'],
],
],
'releaseStatus' => [
'title' => 'Release Status',
'description' => 'The release status of the movie',
'oneOf' => [
[
'type' => 'null',
],
[
'type' => 'string',
'enum' => [
'Released',
'Rumored',
'Post Production',
'In Production',
'Planned',
'Canceled',
],
],
],
],
],
'
namespace App\DTO;
use Spiral\JsonSchemaGenerator\Attribute\Field;
final class Actor
{
public function __construct(
public readonly string $name,
/**
* @var array<Movie>
*/
public readonly ?array $movies = null,
public readonly ?Movie $bestMovie = null;
) {
}
}
use Spiral\JsonSchemaGenerator\Generator;
use App\DTO\Actor;
$generator = new Generator();
$schema = $generator->generate(Actor::class);
namespace App\DTO;
use Spiral\JsonSchemaGenerator\Attribute\Field;
final class Actor
{
public function __construct(
public readonly string $name,
public readonly int $age,
#[Field(title: 'Biography', description: 'The biography of the actor')]
public readonly ?string $bio = null,
/**
* @var list<Movie|Series>|null
*/
#[Field(title: 'Filmography', description: 'List of movies and series featuring the actor')]
public readonly ?array $filmography = null,
#[Field(title: 'Best Movie', description: 'The best movie of the actor')]
public readonly ?Movie $bestMovie = null,
#[Field(title: 'Best Series', description: 'The most prominent series of the actor')]
public readonly ?Series $bestSeries = null,
) {}
}
namespace App\DTO;
use Spiral\JsonSchemaGenerator\Attribute\Field;
use Spiral\JsonSchemaGenerator\Attribute\Format;
final class Series
{
public function __construct(
#[Field(title: 'Title', description: 'The title of the series')]
public readonly string $title,
#[Field(title: 'First Air Year', description: 'The year the series first aired')]
public readonly int $firstAirYear,
#[Field(title: 'Description', description: 'The description of the series')]
public readonly ?string $description = null,
#[Field(title: 'Creator', description: 'The creator or showrunner of the series')]
public readonly ?string $creator = null,
#[Field(title: 'Series Status', description: 'The current status of the series')]
public readonly ?SeriesStatus $status = null,
#[Field(title: 'First Air Date', description: 'The original release date of the series', format: Format::Date)]
public readonly ?string $firstAirDate = null,
#[Field(title: 'Last Air Date', description: 'The most recent air date of the series', format: Format::Date)]
public readonly ?string $lastAirDate = null,
#[Field(title: 'Seasons', description: 'Number of seasons released')]
public readonly ?int $seasons = null,
) {}
}
namespace App\DTO;
use Spiral\JsonSchemaGenerator\Attribute\Field;
final class FlexibleValue
{
public function __construct(
#[Field(title: 'Value', description: 'Can be either string or integer')]
public readonly string|int $value,
#[Field(title: 'Optional Flag', description: 'Boolean or null')]
public readonly bool|null $flag = null,
#[Field(title: 'Flexible Field', description: 'Can be string, int, or null')]
public readonly string|int|null $flex = null,
) {}
}