Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm datepicker posts now()即使ZF2 Doctrine2为空_Doctrine Orm_Datepicker_Zend Framework2 - Fatal编程技术网

Doctrine orm datepicker posts now()即使ZF2 Doctrine2为空

Doctrine orm datepicker posts now()即使ZF2 Doctrine2为空,doctrine-orm,datepicker,zend-framework2,Doctrine Orm,Datepicker,Zend Framework2,我有一个有两个日期的表单,我使用bootstrap3日期选择器。日期不是强制性的。当我提交表单并且一个或两个日期都没有填写时,发布的实体包含实际的日期时间,而不是空的。当我检查$u POST时,日期为空。 我使用doctrine2和ZF2。也许你需要更多的信息。。。提前感谢您的帮助。您应该使用默认值NULL定义日期字段,然后添加NULL=true选项 /** * @ORM\Column(type="date", nullable=true) */ private $someDateField

我有一个有两个日期的表单,我使用bootstrap3日期选择器。日期不是强制性的。当我提交表单并且一个或两个日期都没有填写时,发布的实体包含实际的日期时间,而不是空的。当我检查$u POST时,日期为空。
我使用doctrine2和ZF2。也许你需要更多的信息。。。提前感谢您的帮助。

您应该使用默认值
NULL
定义日期字段,然后添加
NULL=true
选项

/**
 * @ORM\Column(type="date", nullable=true)
 */
private $someDateField= null;

查看以了解更多详细信息。

您应该使用默认值
NULL
定义日期字段,然后添加
NULL=true
选项

/**
 * @ORM\Column(type="date", nullable=true)
 */
private $someDateField= null;

更多详情,请查看。

我发现了一些新东西: 在我的控制器中,$form->isValid()函数是日期字段填充当前日期时间的原因。 我在isValid()之前写下了字段值,它们按预期为空,因为没有在表单中填写。 我在isValid()之后写出了字段值,它们不是NULL,而是一个对象

代码非常简单:

if ($form->isValid()) {
        $objectManager->persist($group);
        $objectManager->flush();
}

我真的不知道该怎么解决这个问题…

我发现了一些新的东西: 在我的控制器中,$form->isValid()函数是日期字段填充当前日期时间的原因。 我在isValid()之前写下了字段值,它们按预期为空,因为没有在表单中填写。 我在isValid()之后写出了字段值,它们不是NULL,而是一个对象

代码非常简单:

if ($form->isValid()) {
        $objectManager->persist($group);
        $objectManager->flush();
}

我真的不知道该如何解决这个问题…

我的解决方案是将filter Zend\filter\Null添加到表单元素中,以便将空字符串转换为Null

array(
  'name' => 'Zend\Filter\Null',
  'options' => array(
    'type' => 'string',
  ),
),
问题原因:

如果您的表单设置为
BindOnValidate
,则将使用一个可操纵值的计算器。如果实体属性是DateTime,则它将字符串转换为DateTime对象。使用

$form->setBindOnValidate(false);
这意味着您的值在调用
isValid()
后立即保持为空字符串“”

我发现DoctrineObject->
handleTypeConversions()
正在将任何字符串(例如来自我的表单帖子)转换为DateTime对象,以与实体字段保持一致。空字符串产生一个日期时间,表示
time()
,即当前时间

当我截获表单POST并将空字符串“”转换为null时,该函数将该字段保留为null

我不确定在验证之前是否最好在控制器内操纵POST数据,或者修改水合策略,但我想两者都可以工作? 编辑:我尝试向DoctrineObject添加自定义策略,或将空字符串“”转换为NULL,但DoctrineObject不会触发自定义策略,它会执行类型转换

进行更改的DoctrineObject或代码的副本:

protected function handleTypeConversions($value, $typeOfField)
{
    switch($typeOfField) {
        case 'datetime':
        case 'time':
        case 'date':
            if (is_int($value)) {
                $dateTime = new DateTime();
                $dateTime->setTimestamp($value);
                $value = $dateTime;
            } elseif (is_string($value)) {
                $value = new DateTime($value);
            }

            break;
        default:
    }

    return $value;
}

我的解决方案是将filter Zend\filter\Null添加到form元素中,以便将空字符串转换为Null

array(
  'name' => 'Zend\Filter\Null',
  'options' => array(
    'type' => 'string',
  ),
),
问题原因:

如果您的表单设置为
BindOnValidate
,则将使用一个可操纵值的计算器。如果实体属性是DateTime,则它将字符串转换为DateTime对象。使用

$form->setBindOnValidate(false);
这意味着您的值在调用
isValid()
后立即保持为空字符串“”

我发现DoctrineObject->
handleTypeConversions()
正在将任何字符串(例如来自我的表单帖子)转换为DateTime对象,以与实体字段保持一致。空字符串产生一个日期时间,表示
time()
,即当前时间

当我截获表单POST并将空字符串“”转换为null时,该函数将该字段保留为null

我不确定在验证之前是否最好在控制器内操纵POST数据,或者修改水合策略,但我想两者都可以工作? 编辑:我尝试向DoctrineObject添加自定义策略,或将空字符串“”转换为NULL,但DoctrineObject不会触发自定义策略,它会执行类型转换

进行更改的DoctrineObject或代码的副本:

protected function handleTypeConversions($value, $typeOfField)
{
    switch($typeOfField) {
        case 'datetime':
        case 'time':
        case 'date':
            if (is_int($value)) {
                $dateTime = new DateTime();
                $dateTime->setTimestamp($value);
                $value = $dateTime;
            } elseif (is_string($value)) {
                $value = new DateTime($value);
            }

            break;
        default:
    }

    return $value;
}

谢谢你的回复。这正是我所拥有的:
code
/***@var date$valid\u from*@ORM\Column(name=“valid\u from”,type=“date”,nullable=true)/protected$valid\u from;/***@var date$valid\u to*@ORM\Column(name=“valid\u to”,type=“date”,nullable=true)*/protected$valid\u to<代码>代码谢谢您的回复。这正是我所拥有的:
code
/***@var date$valid\u from*@ORM\Column(name=“valid\u from”,type=“date”,nullable=true)/protected$valid\u from;/***@var date$valid\u to*@ORM\Column(name=“valid\u to”,type=“date”,nullable=true)*/protected$valid\u to<代码>代码