加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Symfony表单域属性empty_data被忽略

发布时间:2020-12-13 17:34:07 所属栏目:PHP教程 来源:网络整理
导读:根据 Symfony 2.4 Documentation,任何不需要的表单域,但没有提供任何值(默认值为选择字段或空值为文本字段)将被保存到具有NULL值的实体.因此,如果您的实体字段被定义为NOT NULL(例如,不为nullable = true),那么当您坚持实体时,您会得到一个讨厌的错误: SQLS
根据 Symfony 2.4 Documentation,任何不需要的表单域,但没有提供任何值(默认值为选择字段或空值为文本字段)将被保存到具有NULL值的实体.因此,如果您的实体字段被定义为NOT NULL(例如,不为nullable = true),那么当您坚持实体时,您会得到一个讨厌的错误:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'shell' cannot be null

因此,文档说如果您不希望使用NULL作为默认值,则可以在文本或选择字段上指定empty_data属性.但是,这对我来说不行.

实体字段(不可空):

/**
 * @ORMColumn(type="string")
 */
protected $shell = '';

表单生成器(不需要):

->add('shell','choice',array(
    'label' => 'Shell','choices' => array('shell' => 'Fancy Pants'),'required' => false,'empty_data' => ''
))

我是否误会了这个空数据属性?我在其他地方缺少一些重要的设置吗?推荐的方法是什么?

UPDATE

这个Github ticket解释说这是2012年的一个问题,它还没有被修复.

这意味着每个使用表单构建器的人都被迫将任何不需要的字段置于可空字段中?对于框架来说,这似乎是很有意思的.当默认的”或’0’没有唯一的含义并且我们不需要NULL时,有很多原因我们不想使用NULL.对于许多查询,必须检查两个字段= 0或字段= NULL的存在是一个痛苦.

其他人正在使用更好的解决方案吗?

我按照建议的方式执行,但在Entity类中设置一个默认值.所以设置null,Entity正在修改它设置0或其他的东西.
public function __construct() { 
      $this->shell = 0;
}

或者,您可以在设定者中进行处理:

public function setShell($shell) {
      $this->shell = $shell;

      if ( !is_numeric($shell) ) {
             $this->shell = 0;
      }
      return $this;
}

也许不是最好的做法,但它的作用是没有可以使用的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读