在Sonata Admin中,是否可以在从查询字符串中获取值的形式中设置或预编译值?
我有一个带日历的自定义页面,当我点击日历上的日期时,我希望将其重定向到已从查询字符串设置日期的事件的创建页面。类似的东西:
http://localhost:8000/admin/app/event/create?date=2017-07-11
答案 0 :(得分:0)
我在表单构建器上使用请求服务和标记为'mapped' => false
的字段解决了这个问题:
protected function configureFormFields(FormMapper $formMapper)
{
$request = $this->getRequest();
$dateParameter = $request->query->get('date');
$date = null;
if ($dateParameter) {
$date = \DateTime::createFromFormat('!Y-m-d', $dateParameter);
}
if (!$date) {
$formMapper
->add('date', DatePickerType::class)
->add('calendarDate', HiddenType::class, array(
'data' => null,
'mapped' => false,
))
;
} else {
$formMapper
->add('date', DatePickerType::class, array(
'data' => $date,
'disabled' => true,
))
->add('calendarDate', HiddenType::class, array(
'data' => $date->format('Y-m-d'),
'mapped' => false,
))
;
}
$formMapper
// other fields
->add('other_field', ModelType::class)
;
}
然后,在以下方法中,我正在更新实体字段:
public function prePersist($myEntity)
{
$this->preUpdate($myEntity);
}
public function preUpdate($myEntity)
{
$dateString = $this->getForm()->get('calendarDate')->getData();
if ($dateString) {
$date = \DateTime::createFromFormat('!Y-m-d', $dateString);
if ($date) {
$myEntity->setDate($date);
}
}
}
通过这种方式,我可以使用带有或不带查询字符串参数date
的表单:
http://localhost:8000/admin/app/event/24/edit?date=2017-07-01
在HTML中我有这个:
<input type="hidden" id="s59664a9ea44ce_calendarDate" name="s59664a9ea44ce[calendarDate]" class=" form-control" value="2017-07-01" />
<强> P.S。当有人给出-1时,解释原因应该很好......