timehunter/laravel-dto-generator
Composer 安装命令:
composer require timehunter/laravel-dto-generator
包简介
A generator that creates PHP Data Transfer Object by array schema.
关键字:
README 文档
README
A DTO generator that helps you create a bunch of models instead of repeating copy/paste.
Star me if you find its useful. ^.^
Please update your version to be "~v2.0" and re-publish your config file
Install the package in development dependencies:
Via Composer
composer require --dev timehunter/laravel-dto-generator "~2.2.1"
Installation
- Create your local config file
php artisan vendor:publish --provider="TimeHunter\LaravelDTOGenerator\LaravelDTOGeneratorServiceProvider"
- Add your array schema in config
- Run artisan command:
php artisan make:dto
- Check your files under your specified file location
Example
Input
PHP Array Schema
'post' => (object)[ 'author' => (object)[ 'id' => 1, 'note' => null, 'rating' => 4.6, 'first_name' => '', 'last_name' => '', ], 'comment' => (object)[ 'comment_by' => (object)[ 'is_active' => false, 'first_name' => '', 'last_name' => '' ], 'content' => '' ], 'followers' => (object)[ 'id' => 1, 'follower_users' => (array)[ 'first_name' => '', 'last_name' => '' ] ], 'views' => 123, 'text' => '', 'date' => '2019-01-01' ], 'feedback' => (object)[ 'comment' => '' ]
Note: each object should have key name defined.
- If it is an object please define it as a
object, see the above. - If your components are array of objects, please define it as a pure array.
- You have to assign a value for each property, for example, an empty string
''forfirst_name.
Example Output Usage
$result = Followers::create()->setId(1) ->addFollowerUsers( FollowerUsers::create() ->setFirstName('ss') ->setLastName('dd') ) ->addFollowerUsers( FollowerUsers::create() ->setFirstName('ss') ->setLastName('dd') ); var_dump($result->toArray());
Output - DTOs:
User Class
<?php namespace App; class User { /** @var bool $isActive */ private $isActive; /** @var string $firstName */ private $firstName; /** @var string $lastName */ private $lastName; /** * @return User */ public static function create() { return new self; } /** * @return bool */ public function getIsActive(): bool { return $this->isActive; } /** * @param bool $isActive * @return $this */ public function setIsActive(bool $isActive): self { $this->isActive = $isActive; return $this; } /** * @return string */ public function getFirstName(): string { return $this->firstName; } /** * @param string $firstName * @return $this */ public function setFirstName(string $firstName): self { $this->firstName = $firstName; return $this; } /** * @return string */ public function getLastName(): string { return $this->lastName; } /** * @param string $lastName * @return $this */ public function setLastName(string $lastName): self { $this->lastName = $lastName; return $this; } /** * @return array */ public function toArray(): array { return [ 'is_active' => $this->isActive, 'first_name' => $this->firstName, 'last_name' => $this->lastName, ]; } }
Comment Class
namespace App; class Comment { /** @var User $user */ private $user; /** @var string $content */ private $content; /** * @return Comment */ public static function create() { return new self; } /** * @param user $user * @return $this */ public function addUser(User $user): self { $this->user = $user; return $this; } /** * @return User */ public function getUser(): User { return $this->user; } /** * @param User $user * @return $this */ public function setUser(User $user): self { $this->user = $user; return $this; } /** * @return string */ public function getContent(): string { return $this->content; } /** * @param string $content * @return $this */ public function setContent(string $content): self { $this->content = $content; return $this; } /** * @return array */ public function toArray(): array { return [ 'user' => $this->user->toArray(), 'content' => $this->content, ]; } }
Author Class
namespace App; class Author { /** @var int $id */ private $id; /** @var $note */ private $note; /** @var float $rating */ private $rating; /** @var string $firstName */ private $firstName; /** @var string $lastName */ private $lastName; /** * @return Author */ public static function create() { return new self; } /** * @return int */ public function getId(): int { return $this->id; } /** * @param int $id * @return $this */ public function setId(int $id): self { $this->id = $id; return $this; } /** * @return mixed */ public function getNote() { return $this->note; } /** * @param $note * @return $this */ public function setNote($note): self { $this->note = $note; return $this; } /** * @return float */ public function getRating(): float { return $this->rating; } /** * @param float $rating * @return $this */ public function setRating(float $rating): self { $this->rating = $rating; return $this; } /** * @return string */ public function getFirstName(): string { return $this->firstName; } /** * @param string $firstName * @return $this */ public function setFirstName(string $firstName): self { $this->firstName = $firstName; return $this; } /** * @return string */ public function getLastName(): string { return $this->lastName; } /** * @param string $lastName * @return $this */ public function setLastName(string $lastName): self { $this->lastName = $lastName; return $this; } /** * @return array */ public function toArray(): array { return [ 'id' => $this->id, 'note' => $this->note, 'rating' => $this->rating, 'first_name' => $this->firstName, 'last_name' => $this->lastName, ]; } }
Followers Class
namespace App; class Followers { /** @var int $id */ private $id; /** @var FollowerUsers[] $followerUsers */ private $followerUsers = []; /** * @return Followers */ public static function create() { return new self; } /** * @return int */ public function getId(): int { return $this->id; } /** * @param int $id * @return $this */ public function setId(int $id): self { $this->id = $id; return $this; } /** * @param followerUsers $followerUsers * @return $this */ public function addFollowerUsers(FollowerUsers $followerUsers): self { $this->followerUsers[] = $followerUsers; return $this; } /** * @return FollowerUsers[] */ public function getFollowerUsers() { return $this->followerUsers; } /** * @param FollowerUsers[] $followerUsers * @return $this */ public function setFollowerUsers($followerUsers): self { $this->followerUsers = $followerUsers; return $this; } /** * @return array */ public function toArray(): array { return [ 'id' => $this->id, 'follower_users' => array_map(function (FollowerUsers $data){ return $data->toArray(); }, $this->followerUsers), ]; } }
FollowerUser Class
namespace App; class FollowerUsers { /** @var string $firstName */ private $firstName; /** @var string $lastName */ private $lastName; /** * @return FollowerUsers */ public static function create() { return new self; } /** * @return string */ public function getFirstName(): string { return $this->firstName; } /** * @param string $firstName * @return $this */ public function setFirstName(string $firstName): self { $this->firstName = $firstName; return $this; } /** * @return string */ public function getLastName(): string { return $this->lastName; } /** * @param string $lastName * @return $this */ public function setLastName(string $lastName): self { $this->lastName = $lastName; return $this; } /** * @return array */ public function toArray(): array { return [ 'first_name' => $this->firstName, 'last_name' => $this->lastName, ]; } }
License
MIT. Please see the license file for more information.
timehunter/laravel-dto-generator 适用场景与选型建议
timehunter/laravel-dto-generator 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 178 次下载、GitHub Stars 达 50, 最近一次更新时间为 2019 年 08 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「dto」 「class generator」 「model generator」 「json generator」 「json to model」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 timehunter/laravel-dto-generator 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 timehunter/laravel-dto-generator 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 timehunter/laravel-dto-generator 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Collection of methods that I or you usually use.
PHP library for the MUMSYS project
A very simple yet useful helper class to handle PHP file uploads.
A simple library that allows transform any kind of data to native php data or whatever
Data transfer objects
Convert doctrine dbal query result to dto
统计信息
- 总下载量: 178
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 50
- 点击次数: 11
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-08-12