代码之家  ›  专栏  ›  技术社区  ›  StockBreak

Sonata Admin从查询字符串编译表单字段

  •  -1
  • StockBreak  · 技术社区  · 7 年前

    我有一个带有日历的自定义页面,当我单击日历上的日期时,我希望被重定向到事件的创建页面,其中日期已从查询字符串中设置。类似于:

    http://localhost:8000/admin/app/event/create?date=2017-07-11

    1 回复  |  直到 7 年前
        1
  •  0
  •   StockBreak    7 年前

    我通过使用 字段标记为 '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

    enter image description here

    在HTML中,我有以下内容:

    <input type="hidden" id="s59664a9ea44ce_calendarDate" name="s59664a9ea44ce[calendarDate]" class=" form-control" value="2017-07-01" />
    

    P、 当有人给a-1时,最好解释一下为什么。。。