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