gpt4 book ai didi

php - Symfony:在 Doctrine Entity 方法中使用返回类型提示的表单问题

转载 作者:可可西里 更新时间:2023-11-01 13:05:11 26 4
gpt4 key购买 nike

我今天特别勤奋,决定对我所有的 symfony 实体方法进行返回类型提示。所以:

<?php

Class User {
private string $username;
public method getUsername(): string {}
}

一切都很好,直到我创建了一个创建新用户的表单:

$user = new User();
$this->createForm(SignupType::class, $user);

当显示表单时,Symfony 会自动获取 User $user 的这个新实例的属性。但是因为是新的实例化,它的username属性当然还是null,这是一个不正确的返回类型,因为它需要是string .

我应该:

  1. 在 Symfony 实体中没有返回类型提示(meh);
  2. set $username = ''(但有点违背了不允许空白的目的,我可以看到各种错误不断演变);或
  3. 取消映射 symfony 表单上的字段
  4. 其他可能的解决方案...

最佳答案

如果实体属性不能为null(并且您使用的是 PHP 7.1+),则应用 nullable return type declaration听起来更像是维护实体和表单之间直接数据绑定(bind)的肮脏且快速的解决方法(使用 Symfony 表单组件)。

更好的全局方法(在我看来)是使用 DTO(数据传输对象)将表单数据绑定(bind)与 Doctrine 实体分离,这是一个简单的方法POPO(普通旧 PHP 对象)来包含您的表单数据。

使用 DTO 将允许您在 Doctrine 实体中保持严格的类型提示(不会丢失数据一致性)并将解耦表单数据绑定(bind)(还有数据验证) 来自您的实体。

DTO 允许重用并具有许多其他优点。

关于将 DTO 与 Symfony Forms 结合使用的一些有用引用资料:

关于php - Symfony:在 Doctrine Entity 方法中使用返回类型提示的表单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43959421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com