2017-07-11 2 views
-1

Dans Sonata Admin est-il possible de définir ou de précompiler une valeur dans un formulaire en la prenant dans la chaîne de requête?Sonata Admin compile le champ de formulaire à partir de la chaîne de requête

J'ai une page personnalisée avec un calendrier et quand je clique une date sur le calendrier je voudrais être redirigé vers la page de création d'un événement où la date est déjà définie à partir de la chaîne de requête. Quelque chose comme:

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

Répondre

0

Je l'ai résolu en utilisant le service de demande et un champ marqué comme 'mapped' => false sur mon générateur de formulaire:

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

Ensuite, la méthode suivante, je suis mise à jour du champ d'entité:

De cette façon, je peux utiliser ma forme avec ou sans le paramètre de chaîne de requête date:

http://localhost:8000/admin/app/event/24/edit?date=2017-07-01

enter image description here

Et dans le code HTML je ceci:

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

post-scriptum quand quelqu'un donne -1 ça devrait être sympa d'expliquer pourquoi ...