chaplean / dto-handler-bundle
将请求内容加载到 DTO 中
Requires
- php: >=7.1
- ext-json: ^1.5
- doctrine/annotations: ^1.6
- doctrine/orm: ^2.6
- sensio/framework-extra-bundle: ^5.0
- symfony/config: ^3.0 || ^4.0
- symfony/console: ^3.0 || ^4.0
- symfony/dependency-injection: ^3.0 || ^4.0
- symfony/expression-language: ~2.7|~3.0|~4.0
- symfony/property-access: ^3.0 || ^4.0
- symfony/translation: ^3.0 || ^4.0
- symfony/validator: ^3.0 || ^4.0
Requires (Dev)
- mockery/mockery: ^1.2.2
- php-coveralls/php-coveralls: ^2.1
- php-mock/php-mock-mockery: ^1.3
- symfony/phpunit-bridge: ^4.3
README
此版本的包需要 Symfony 3.4+。
dto-handler-bundle 将请求内容加载到数据传输对象(DTO)中,映射其属性,如数据库中的实体。它使用 SensioLabs Framework Extra Bundle 提供的 ParamConverterInterface
自动将请求内容映射到相应的变量。
快速入门
dto-handler-bundle 使用简单,几乎不需要配置。要在控制器中使用,只需在控制器参数中声明变量即可
public function postAction(DummyDataTransferObject $dto): Response { // ... }
并在您的 DTO 中添加 DTO
注解
/** * @DTO */ final class DummyDataTransferObject { // ... }
目录
1. 安装
此包至少需要 Symfony 3.4。
您可以使用 composer 安装 dto-handler-bundle
composer require chaplean/dto-handler-bundle
然后,通过将其添加到项目中 app/AppKernel.php
文件中注册的包列表中,来启用该包
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // ... new Chaplean\Bundle\DtoHandlerBundle\ChapleanDtoHandlerBundle(), ]; // ... } // ... }
2. 入门
3. 示例
以下示例中,请求中的数据将加载到 DTO 中。
$property1
和 $property2
将保持不变,因此它们的值将是请求中设置的值。
$property3
将使用字段 keyname
映射到适当的实体,因此请求中 property3
字段的值应该是 DummyEntity 的 keyname
。
$property4
将是使用 id
映射的实体的数组,因此请求中 property4
的值应该是一个 id
的数组。
控制器
/** * ... * * @ParamConverter( * name="dtoVariable", * converter="data_transfer_object_converter", * options={"validations": "violationsList"} * ) * * @param DummyDataTransferObject $dummyDataTransferObject * @param ConstraintViolationListInterface $violationsList * * @return Response */ public function postAction( DummyDataTransferObject $dummyDataTransferObject, ConstraintViolationListInterface $violationsList ): Response { // ... }
数据传输对象(DummyDataTransferObject)
/** * Class DummyDataTransferObject. * * @DTO */ final class DummyDataTransferObject { /** * @var string */ public $property1; /** * @var integer * * @Assert\Type("integer") */ public $property2; /** * @var DummyEntity * * @Assert\Type("Chaplean\Bundle\DtoHandlerBundle\Tests\Resources\Entity\DummyEntity") * @MapTo("keyname") */ public $property3; /** * @var DummyEntity * * @Assert\All( * @Assert\Type("Chaplean\Bundle\DtoHandlerBundle\Tests\Resources\Entity\DummyEntity") * ) */ public $property4; }
4. 版本控制
dto-handler-bundle 遵循 语义版本控制。简而言之,方案是 MAJOR.MINOR.PATCH,其中
- MAJOR 在有破坏性更改时增加,
- MINOR 在向后兼容的方式添加新功能时增加,
- PATCH 在向后兼容的方式修复错误时增加。
低于 1.0.0 的版本被视为实验性的,任何时间都可能发生破坏性更改。
5. 贡献
欢迎贡献力量!有很多种贡献方式,我们非常感激所有贡献。以下是其中的一些主要方式:
- 错误报告:虽然我们努力打造高质量的软件,但错误仍然可能发生,我们无法修复我们不知道的问题。所以即使您不确定或者只是想提问,也请提交报告。任何问题都可能表明文档仍有改进空间!
- 功能请求:当前API没有涵盖您的用例?希望提出建议或添加功能?我们很高兴阅读您的建议,并开始讨论以寻找最佳解决方案。
- 拉取请求:希望贡献代码或文档?我们非常欢迎!如果您需要帮助开始,可以查看GitHub上的拉取请求文档。我们使用“分叉并拉取模型”,即贡献者将更改推送到他们的个人分叉,然后创建拉取请求到主仓库。请将您的拉取请求针对
master
分支。
提醒一下,所有贡献者都应遵守我们的行为准则。
6. 破坏性测试
在破坏性测试此项目时,您可能会发现以下命令很有用。
# Install dependencies composer install # Run tests bin/phpunit
7. 许可证
dto-handler-bundle是在MIT许可证的条款下分发的。
有关详细信息,请参阅LICENSE。