{"id":22930772,"url":"https://github.com/ryandadeng/laravel-dto-generator","last_synced_at":"2025-08-12T15:31:58.427Z","repository":{"id":57069807,"uuid":"198155752","full_name":"RyanDaDeng/laravel-dto-generator","owner":"RyanDaDeng","description":"A generator that creates PHP Data Transfer Object by array schema. ","archived":false,"fork":false,"pushed_at":"2019-10-30T00:45:44.000Z","size":46,"stargazers_count":47,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-08T11:55:43.233Z","etag":null,"topics":["array-to-class","array-to-model","class-generator","dto-generator","json-generator","json-to-class","json-to-class-generator","json-to-model","laravel-generator","model-generator","php","php-class","php-dto","php-dto-generator","php-model-generator"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RyanDaDeng.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":"contributing.md","funding":null,"license":"license.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-07-22T05:48:10.000Z","updated_at":"2023-03-07T10:39:04.000Z","dependencies_parsed_at":"2022-08-24T14:54:19.003Z","dependency_job_id":null,"html_url":"https://github.com/RyanDaDeng/laravel-dto-generator","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyanDaDeng%2Flaravel-dto-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyanDaDeng%2Flaravel-dto-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyanDaDeng%2Flaravel-dto-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyanDaDeng%2Flaravel-dto-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RyanDaDeng","download_url":"https://codeload.github.com/RyanDaDeng/laravel-dto-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229694566,"owners_count":18108931,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["array-to-class","array-to-model","class-generator","dto-generator","json-generator","json-to-class","json-to-class-generator","json-to-model","laravel-generator","model-generator","php","php-class","php-dto","php-dto-generator","php-model-generator"],"created_at":"2024-12-14T10:29:50.462Z","updated_at":"2024-12-14T10:31:58.091Z","avatar_url":"https://github.com/RyanDaDeng.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Laravel DTO Generator\n\n[![Latest Version on Packagist][ico-version]][link-packagist]\n[![Total Downloads][ico-downloads]][link-downloads]\n\n\n[link-packagist]: https://packagist.org/packages/timehunter/laravel-dto-generator\n[ico-version]: https://img.shields.io/packagist/v/timehunter/laravel-dto-generator.svg?style=flat-square\n[ico-downloads]: https://img.shields.io/packagist/dt/timehunter/laravel-dto-generator.svg?style=flat-square\n[link-downloads]: https://packagist.org/packages/timehunter/laravel-dto-generator\n\n## A DTO generator that helps you create a bunch of models instead of repeating copy/paste.\n\n### Star me if you find its useful. ^.^\n\n*Please update your version to be \"~v2.0\" and re-publish your config file*\n\nInstall the package in development dependencies:\n\nVia Composer\n\n``` bash\ncomposer require --dev timehunter/laravel-dto-generator \"~2.2.1\"\n```\n\n## Installation\n\n1. Create your local config file\n````bash\nphp artisan vendor:publish --provider=\"TimeHunter\\LaravelDTOGenerator\\LaravelDTOGeneratorServiceProvider\"\n````\n2. Add your array schema in config\n3. Run artisan command:\n````bash\nphp artisan make:dto\n```` \n4. Check your files under your specified file location \n\n\n## Example\n\n\n### Input\n\n#### PHP Array Schema\n\n````php\n        'post'     =\u003e (object)[\n            'author'    =\u003e (object)[\n                'id'         =\u003e 1,\n                'note'       =\u003e null,\n                'rating'     =\u003e 4.6,\n                'first_name' =\u003e '',\n                'last_name'  =\u003e '',\n            ],\n            'comment'   =\u003e (object)[\n                'comment_by' =\u003e (object)[\n                    'is_active'  =\u003e false,\n                    'first_name' =\u003e '',\n                    'last_name'  =\u003e ''\n                ],\n                'content'    =\u003e ''\n            ],\n            'followers' =\u003e (object)[\n                'id'             =\u003e 1,\n                'follower_users' =\u003e (array)[\n                    'first_name' =\u003e '',\n                    'last_name'  =\u003e ''\n                ]\n            ],\n            'views'     =\u003e 123,\n            'text'      =\u003e '',\n            'date'      =\u003e '2019-01-01'\n        ],\n        'feedback' =\u003e (object)[\n            'comment' =\u003e ''\n        ]\n````\n\nNote: each object should have key name defined. \n\n- If it is an object please define it as a `object`, see the above.\n- If your components are array of objects, please define it as a pure array.\n- You have to assign a value for each property, for example, an empty string `''` for `first_name`.\n\n#### Example Output Usage\n\n````php\n    $result = Followers::create()-\u003esetId(1)\n            -\u003eaddFollowerUsers(\n                FollowerUsers::create()\n                    -\u003esetFirstName('ss')\n                    -\u003esetLastName('dd')\n            )\n            -\u003eaddFollowerUsers(\n                FollowerUsers::create()\n                    -\u003esetFirstName('ss')\n                    -\u003esetLastName('dd')\n            );\n        var_dump($result-\u003etoArray());\n````\n\n\n### Output - DTOs:\n\n\n#### User Class\n````php\n\u003c?php\n\nnamespace App;\n\nclass User\n{\n\t/** @var bool $isActive */\n\tprivate $isActive;\n\n\t/** @var string $firstName */\n\tprivate $firstName;\n\n\t/** @var string $lastName */\n\tprivate $lastName;\n\n\n\t/**\n\t * @return User\n\t */\n\tpublic static function create()\n\t{\n\t\treturn new self;\n\t}\n\n\n\t/**\n\t * @return bool\n\t */\n\tpublic function getIsActive(): bool\n\t{\n\t\treturn $this-\u003eisActive;\n\t}\n\n\n\t/**\n\t * @param bool $isActive\n\t * @return $this\n\t */\n\tpublic function setIsActive(bool $isActive): self\n\t{\n\t\t$this-\u003eisActive = $isActive;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return string\n\t */\n\tpublic function getFirstName(): string\n\t{\n\t\treturn $this-\u003efirstName;\n\t}\n\n\n\t/**\n\t * @param string $firstName\n\t * @return $this\n\t */\n\tpublic function setFirstName(string $firstName): self\n\t{\n\t\t$this-\u003efirstName = $firstName;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return string\n\t */\n\tpublic function getLastName(): string\n\t{\n\t\treturn $this-\u003elastName;\n\t}\n\n\n\t/**\n\t * @param string $lastName\n\t * @return $this\n\t */\n\tpublic function setLastName(string $lastName): self\n\t{\n\t\t$this-\u003elastName = $lastName;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return array\n\t */\n\tpublic function toArray(): array\n\t{\n\t\treturn [\n\t\t   'is_active' =\u003e $this-\u003eisActive,\n\t\t   'first_name' =\u003e $this-\u003efirstName,\n\t\t   'last_name' =\u003e $this-\u003elastName,\n\t\t];\n\t}\n}\n\n\n````\n\n#### Comment Class\n````php\nnamespace App;\n\nclass Comment\n{\n\t/** @var User $user */\n\tprivate $user;\n\n\t/** @var string $content */\n\tprivate $content;\n\n\n\t/**\n\t * @return Comment\n\t */\n\tpublic static function create()\n\t{\n\t\treturn new self;\n\t}\n\n\n\t/**\n\t * @param user $user\n\t * @return $this\n\t */\n\tpublic function addUser(User $user): self\n\t{\n\t\t$this-\u003euser = $user;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return User\n\t */\n\tpublic function getUser(): User\n\t{\n\t\treturn $this-\u003euser;\n\t}\n\n\n\t/**\n\t * @param User $user\n\t * @return $this\n\t */\n\tpublic function setUser(User $user): self\n\t{\n\t\t$this-\u003euser = $user;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return string\n\t */\n\tpublic function getContent(): string\n\t{\n\t\treturn $this-\u003econtent;\n\t}\n\n\n\t/**\n\t * @param string $content\n\t * @return $this\n\t */\n\tpublic function setContent(string $content): self\n\t{\n\t\t$this-\u003econtent = $content;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return array\n\t */\n\tpublic function toArray(): array\n\t{\n\t\treturn [\n\t\t   'user' =\u003e $this-\u003euser-\u003etoArray(),\n\t\t   'content' =\u003e $this-\u003econtent,\n\t\t];\n\t}\n}\n\n\n````\n#### Author Class\n````php\nnamespace App;\n\nclass Author\n{\n\t/** @var int $id */\n\tprivate $id;\n\n\t/** @var  $note */\n\tprivate $note;\n\n\t/** @var float $rating */\n\tprivate $rating;\n\n\t/** @var string $firstName */\n\tprivate $firstName;\n\n\t/** @var string $lastName */\n\tprivate $lastName;\n\n\n\t/**\n\t * @return Author\n\t */\n\tpublic static function create()\n\t{\n\t\treturn new self;\n\t}\n\n\n\t/**\n\t * @return int\n\t */\n\tpublic function getId(): int\n\t{\n\t\treturn $this-\u003eid;\n\t}\n\n\n\t/**\n\t * @param int $id\n\t * @return $this\n\t */\n\tpublic function setId(int $id): self\n\t{\n\t\t$this-\u003eid = $id;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return mixed\n\t */\n\tpublic function getNote()\n\t{\n\t\treturn $this-\u003enote;\n\t}\n\n\n\t/**\n\t * @param  $note\n\t * @return $this\n\t */\n\tpublic function setNote($note): self\n\t{\n\t\t$this-\u003enote = $note;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return float\n\t */\n\tpublic function getRating(): float\n\t{\n\t\treturn $this-\u003erating;\n\t}\n\n\n\t/**\n\t * @param float $rating\n\t * @return $this\n\t */\n\tpublic function setRating(float $rating): self\n\t{\n\t\t$this-\u003erating = $rating;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return string\n\t */\n\tpublic function getFirstName(): string\n\t{\n\t\treturn $this-\u003efirstName;\n\t}\n\n\n\t/**\n\t * @param string $firstName\n\t * @return $this\n\t */\n\tpublic function setFirstName(string $firstName): self\n\t{\n\t\t$this-\u003efirstName = $firstName;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return string\n\t */\n\tpublic function getLastName(): string\n\t{\n\t\treturn $this-\u003elastName;\n\t}\n\n\n\t/**\n\t * @param string $lastName\n\t * @return $this\n\t */\n\tpublic function setLastName(string $lastName): self\n\t{\n\t\t$this-\u003elastName = $lastName;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return array\n\t */\n\tpublic function toArray(): array\n\t{\n\t\treturn [\n\t\t   'id' =\u003e $this-\u003eid,\n\t\t   'note' =\u003e $this-\u003enote,\n\t\t   'rating' =\u003e $this-\u003erating,\n\t\t   'first_name' =\u003e $this-\u003efirstName,\n\t\t   'last_name' =\u003e $this-\u003elastName,\n\t\t];\n\t}\n}\n\n````\n\n#### Followers Class\n````php\nnamespace App;\n\nclass Followers\n{\n\t/** @var int $id */\n\tprivate $id;\n\n\t/** @var FollowerUsers[] $followerUsers */\n\tprivate $followerUsers = [];\n\n\n\t/**\n\t * @return Followers\n\t */\n\tpublic static function create()\n\t{\n\t\treturn new self;\n\t}\n\n\n\t/**\n\t * @return int\n\t */\n\tpublic function getId(): int\n\t{\n\t\treturn $this-\u003eid;\n\t}\n\n\n\t/**\n\t * @param int $id\n\t * @return $this\n\t */\n\tpublic function setId(int $id): self\n\t{\n\t\t$this-\u003eid = $id;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @param followerUsers $followerUsers\n\t * @return $this\n\t */\n\tpublic function addFollowerUsers(FollowerUsers $followerUsers): self\n\t{\n\t\t$this-\u003efollowerUsers[] = $followerUsers;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return FollowerUsers[]\n\t */\n\tpublic function getFollowerUsers()\n\t{\n\t\treturn $this-\u003efollowerUsers;\n\t}\n\n\n\t/**\n\t * @param FollowerUsers[] $followerUsers\n\t * @return $this\n\t */\n\tpublic function setFollowerUsers($followerUsers): self\n\t{\n\t\t$this-\u003efollowerUsers = $followerUsers;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return array\n\t */\n\tpublic function toArray(): array\n\t{\n\t\treturn [\n\t\t   'id' =\u003e $this-\u003eid,\n\t\t   'follower_users' =\u003e array_map(function (FollowerUsers $data){\n\t\t          return $data-\u003etoArray();\n\t\t      }, $this-\u003efollowerUsers),\n\t\t];\n\t}\n}\n\n````\n\n\n#### FollowerUser Class\n````php\nnamespace App;\n\nclass FollowerUsers\n{\n\t/** @var string $firstName */\n\tprivate $firstName;\n\n\t/** @var string $lastName */\n\tprivate $lastName;\n\n\n\t/**\n\t * @return FollowerUsers\n\t */\n\tpublic static function create()\n\t{\n\t\treturn new self;\n\t}\n\n\n\t/**\n\t * @return string\n\t */\n\tpublic function getFirstName(): string\n\t{\n\t\treturn $this-\u003efirstName;\n\t}\n\n\n\t/**\n\t * @param string $firstName\n\t * @return $this\n\t */\n\tpublic function setFirstName(string $firstName): self\n\t{\n\t\t$this-\u003efirstName = $firstName;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return string\n\t */\n\tpublic function getLastName(): string\n\t{\n\t\treturn $this-\u003elastName;\n\t}\n\n\n\t/**\n\t * @param string $lastName\n\t * @return $this\n\t */\n\tpublic function setLastName(string $lastName): self\n\t{\n\t\t$this-\u003elastName = $lastName;\n\t\treturn $this;\n\t}\n\n\n\t/**\n\t * @return array\n\t */\n\tpublic function toArray(): array\n\t{\n\t\treturn [\n\t\t   'first_name' =\u003e $this-\u003efirstName,\n\t\t   'last_name' =\u003e $this-\u003elastName,\n\t\t];\n\t}\n}\n\n````\n\n\n## License\n\nMIT. Please see the [license file](license.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryandadeng%2Flaravel-dto-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryandadeng%2Flaravel-dto-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryandadeng%2Flaravel-dto-generator/lists"}