2010-05-21 8 views
4

J'utilise un widget personnalisé pour les champs de date, et je veux l'utiliser dans toutes mes formes. Le problème est que symfony utilise la valeur par défaut sfWidgetFormDate. Ce que je veux, c'est changer ce widget par défaut afin de générer des formulaires avec mon widget personnalisé. Je ne veux pas changer à la main tous les formulaires générés.Formulaires Symfony: comment modifier le widget par défaut pour la génération de formulaire

La seule approche que j'ai trouvé est le Trik de modify BaseFormDoctrine.php:

public function setup() 
{ 
    foreach($this->getWidgetSchema()->getFields() as $name=>$widget) 
    { 
     if($widget instanceof sfWidgetFormDate) 
     { 
      $this->widgetSchema[$name] = new sfWidgetFormJQueryDate(array(
       'config' => '{}', 
       'image'=>'/images/calendar.png', 
      )); 
     } 
    } 
} 

Répondre

5

Ce que vous pouvez faire est de créer votre propre classe de générateur de forme.

class myFormGenerator extends sfDoctrineGenerator 
{ 

    public function getWidgetClassForColumn($column) 
    { 
    switch ($column->getDoctrineType()) 
    { 
     case 'date': 
     return 'sfWidgetFormJQueryDate'; 
     break; 
     default: 
     return parent::getWidgetClassForColumn($column); 
    } 
    } 
} 

Enregistrer que quelque part raisonnable dans votre dossier lib, vider le cache, etc ..

réexécuter Ensuite, votre générateur pour ... comme si

php doctrine:build-forms --generator-class='myFormGenerator' 

Je n'ai pas essayé l'un des ci-dessus, mais la théorie est saine je pense ...

Jetez un oeil sur les fichiers suivants pour voir d'où j'ai pensé:

lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildFormsTask.class.php 
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineFormGenerator.class.php 
+0

Fantastique! Je l'ai essayé et travaille – caymcorp

0

Suite de la réponse, comme je veux définir les options par défaut pour le widget, je surchargeons aussi la fonction de le faire:

class myFormGenerator extents sfDoctrineFormGenerator 
{ 

    public function getWidgetClassForColumn($column) 
    { 
    ... 
    } 

    public function getWidgetOptionsForColumn($column) 
    { 
    switch ($column->getDoctrineType()) 
    { 
     case 'date': 
     return "array('config' => '{}', 'image'=>'/images/calendar.png')"; 
    break; 
     default: 
     return parent::getWidgetOptionsForColumn($column); 
    } 
    } 
} 
Questions connexes