2017-07-11 13 views
-1

からフォームフィールドをコンパイルするには、クエリ文字列からそれを取って、フォームに値を設定するか、またはプリコンパイルすることは可能でしょうか?ソナタ管理者は、ソナタ管理ツールで、クエリ文字列

私はカレンダーとカスタムページを持っていると私は、カレンダー上の日付をクリックしたときに、私は日付がすでにクエリ文字列から設定されているイベントの作成ページにリダイレクトされるようにしたいと思います。ような何か:

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

答えて

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); 
     } 
    } 
} 

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.S.私は、クエリ文字列パラメータdateの有無にかかわらず、私のフォームを使用することができます。このように誰かが与えたとき-1には、理由を説明する素敵でなければなりません...

関連する問題