Sonata Admin 从查询字符串编译表单字段
Sonata Admin compile form field from query string
在 Sonata Admin 中是否可以设置或预编译一个从查询字符串中获取的值?
我有一个带有日历的自定义页面,当我单击日历上的一个日期时,我想被重定向到一个事件的创建页面,其中日期已从查询字符串中设置。类似于:
http://localhost:8000/admin/app/event/create?date=2017-07-11
我通过使用 请求服务 和在我的表单生成器上标记为 '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 时,应该很好地解释为什么...
在 Sonata Admin 中是否可以设置或预编译一个从查询字符串中获取的值?
我有一个带有日历的自定义页面,当我单击日历上的一个日期时,我想被重定向到一个事件的创建页面,其中日期已从查询字符串中设置。类似于:
http://localhost:8000/admin/app/event/create?date=2017-07-11
我通过使用 请求服务 和在我的表单生成器上标记为 '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 时,应该很好地解释为什么...