Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
Forms 西姆弗尼:你的手需要虫子吗?_Forms_Symfony - Fatal编程技术网

Forms 西姆弗尼:你的手需要虫子吗?

Forms 西姆弗尼:你的手需要虫子吗?,forms,symfony,Forms,Symfony,这是一个任务实体对象(它的一部分): 在表单视图中,我想将日期和时间分开。所以我在Mission类中添加了4个字段(当然没有关于数据库的注释)。这是: /** * * @Assert\NotBlank( * message = "Cette valeur est obligatoire." * ) */ private $datedebmissiondate; /** * * @Assert\NotBlank( * message = "Cette val

这是一个任务实体对象(它的一部分):

在表单视图中,我想将日期和时间分开。所以我在Mission类中添加了4个字段(当然没有关于数据库的注释)。这是:

/**
 *
 * @Assert\NotBlank(
 *      message = "Cette valeur est obligatoire."
 * )
 */
private $datedebmissiondate;

 /**
 *
 * @Assert\NotBlank(
 *      message = "Cette valeur est obligatoire."
 * )
 */
private $datedebmissiontime;

 /**
 *
 * @Assert\NotBlank(
 *      message = "Cette valeur est obligatoire."
 * )
 */
private $datefinmissiondate;

 /**
 *
 * @Assert\NotBlank(
 *      message = "Cette valeur est obligatoire."
 * )
 */
private $datefinmissiontime;

function getDatedebmissiondate() {
    return $this->getDatedebmission();
}

function getDatedebmissiontime() {
    return $this->getDatedebmission()->format('H:i');
}

function getDatefinmissiondate() {
    return $this->getDatefinmission();
}

function getDatefinmissiontime() {
    return $this->getDatefinmission()->format('H:i');
}

function setDatedebmissiondate(\DateTime $datedebmissiondate) {
    $this->datedebmissiondate = $datedebmissiondate;
    $this->setDatedebmission($datedebmissiondate);
}

function setDatedebmissiontime(String $datedebmissiontime) {
    $datedebmission = $this->getDatedebmission();
    $time = explode(':', $datedebmissiontime);

    if(count($time) !== 2) {
        throw new Exception('heure incorrect dans datedebmissiontime');
    } else {
        $this->datedebmissiontime = $datedebmissiontime;
        $datedebmission->setTime($time[0], $time[1]);
        $this->setDatedebmission($datedebmission);
    }   
}

function setDatefinmissiondate($datefinmissiondate) {
    $this->datefinmissiondate = $datefinmissiondate;
}

function setDatefinmissiontime(String $datefinmissiontime) {
    $datefinmission = $this->getDatefinmission();
    $time = explode(':', $datefinmissiontime);

    if(count($time) !== 2) {
        throw new Exception('heure incorrect dans datefinmissiontime');
    } else {
        $this->datefinmissiontime = $datefinmissiontime;
        $datefinmission->setTime($time[0], $time[1]);
        $this->setDatefinmission($datefinmission);
    }   
}
现在,我可以在MissionType类中添加使用我的新字段:

$builder->add('datedebmissiondate', DateType::class, array(
        'label' => 'Date de début mission',
        'widget' => 'single_text',
        'format' => 'dd/MM/yyyy',
        'attr' => array(
            'no_results_text' => 'JJ/MM/AAAA'
        )
    ));

    $builder->add('datedebmissiontime', TextType::class, array(
        'label' => 'Heure de début mission',
        'attr' => array(
            'placeholder' => 'Heure:Minutes'
        )
    ));

    $builder->add('datefinmissiondate', DateType::class, array(
        'label' => 'Date de fin mission',
        'widget' => 'single_text',
        'format' => 'dd/MM/yyyy',
        'attr' => array(
            'no_results_text' => 'JJ/MM/AAAA'
        )
    ));

    $builder->add('datefinmissiontime', TextType::class, array(
        'label' => 'Heure de fin mission',
        'attr' => array(
            'placeholder' => 'Heure:Minutes'
        )
    ));
细枝现在:

 {{ form_row(form_mission.datedebmissiondate) }}
 {{ form_row(form_mission.datefinmissiondate) }}
 {{ form_row(form_mission.datedebmissiontime) }}
 {{ form_row(form_mission.datefinmissiontime) }}
所有的东西都像我期望的那样显示在datedebmissiontime和datefinmissiontime中的日期和2小时08:00和12:00

提交表单后,我在控制器中处理请求:

$form->handleRequest($request);
调试时,我检查了请求:一切都在那里

此操作应调用请求中不同参数的所有set方法。 实际上,会调用set方法。除了最后一个datefinmissiontime之外,所有方法都会被调用

结果是我的任务对象在HandlerRequest测试后获得:

$mission = $form->getData()
包含除datefinmissiontime字段以外的所有内容,该字段为空:我的表单无效

返回视图,它在
datefinmissiontime
字段下显示错误消息,默认值为12:00

重要提示:如果我更改了该值(例如15:00),那么它现在可以工作,并且所有set方法都会被调用


如果我没有更改,有人知道为什么在调用
handleRequest
时不调用此字段的set方法吗?

您的
setDatefinmissiondate
缺少重要的一行

$this->setDatefinmission($datefinmissiondate);
这就是为什么即使日期更改,基础日期时间也不会更改,并且保持为
null

不会调用
setDetafinmissiontime
,因为如果值没有更改,表单组件AFAIK不会调用setter,从属性访问器(表单组件使用)的角度来看,它没有更改


添加“缺少”行可以解决问题。

非常感谢您。。。我找了好几个小时都没看到。。。新眼睛的力量。
$this->setDatefinmission($datefinmissiondate);