blu*_*isk 7 php return-type symfony doctrine-orm php-7
今天我非常勤奋,并决定返回类型提示我所有的symfony实体方法.所以:
<?php
Class User {
private string $username;
public method getUsername(): string {}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到我创建一个表单来创建一个新用户:
$user = new User();
$this->createForm(SignupType::class, $user);
Run Code Online (Sandbox Code Playgroud)
显示表单时,Symfony会自动获取此新实例的属性User $user.但由于它是一个新的实例化,它的username属性当然仍然是null,这是一个不正确的返回类型,因为它需要string.
我应该:
$username = ''(但是帽子有点违背了不允许空白的目的,我可以看到各种各样的错误演变); 要么gp_*_*ver 22
如果实体属性不能null(并且您使用PHP 7.1+),则应用可空返回类型声明听起来更像是一种肮脏且快速的解决方法,以维护实体和表单之间的直接数据绑定(使用Symfony表单组件).
更好的全局方法(在我看来)是使用DTO(数据传输对象)将表单数据绑定与您的Doctrine实体分离,这是一个简单的POPO(Plain Old PHP Object)来包含表单数据.
使用DTO将允许您在Doctrine实体中保持严格的类型提示(不会丢失数据一致性),并将从您的实体中分离表单数据绑定(以及数据验证).
DTO允许可重用性并具有许多其他优点.
关于在Symfony Forms中使用DTO的一些有用的参考:
| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |