2010-07-02 5 views
2

J'ai installé le plugin sfDoctrineGuard. Tout fonctionne, je peux utiliser la page/sf_guard_user/edit /: id pour éditer un utilisateur. Je n'aimais pas la façon dont les permissions étaient répertoriées dans une liste de sélection, je voulais les afficher en tant que cases à cocher séparées en fonction du nom de la permission. Pour ce faire, j'ai créé un widget personnalisé qui s'étend sfWidgetFormChoice. Cela fonctionne comme je le veux aussi, mais mon problème est le suivant:symfony override BaseForm class howto

Pour utiliser mon widget personnalisé, j'edited les lignes suivantes dans ce fichier:

lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesfGuardUserForm.class.php 

Avant:

 'groups_list'  => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup')), 
     'permissions_list' => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission')), 

Après:

 'groups_list'  => new sfWidgetFormDoctrineChoice(array('multiple' => true,  'model' => 'sfGuardGroup', 'expanded' => true)), 
     'permissions_list' => new myCustomPermissionWidget(), 

Cela donne le résultat correct. Le problème est que je n'aurais pas dû éditer la classe de base car à chaque fois que je construis mon modèle, le fichier est écrasé.

Je dois modifier ce fichier:

lib/form/doctrine/sfDoctrineGuardPlugin/sfGuardUserForm.class.php 

    class sfGuardUserForm extends PluginsfGuardUserForm 
    { 
     public function configure() 
     { 
     parent::configure(); 

     $this->setWidgets(array(
      'groups_list'  => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup', 'expanded' => true)), 
      'permissions_list' => new myCustomPermissionWidget(), 
     )); 
     } 
    } 

Mais cela ne fonctionne pas. J'ai essayé le code dans une nouvelle fonction setup(), avec parent :: setup() avant et après mon code mais toujours rien. PluginsfGuardUserForm est abstrait et étend BasesfGuardUserForm mais je ne vois pas pourquoi cela l'empêcherait de fonctionner.

Des idées?

Merci

Répondre

2

Je crois que l'action utilisateur de modifier utilise la sfGuardUserAdminForm de classe qui se trouve dans le répertoire du plugin

Copiez le fichier

plugins/sfDoctrineGuardPlugin/lib/form /doctrine/sfGuardUserAdminForm.class.php

dans

lib/form/doctrine/

Ensuite, ajoutez cette ligne à la méthode de configuration()

$ this-> setWidget ('permissions_list' => new myCustomPermissionWidget()) ;

Vous n'avez pas besoin d'ajouter un appel à parent :: configure() c'est une mauvaise pratique de le faire dans le framework de formulaire et vous ne devriez le faire que si vous le savez.

+0

Merci pour cela, c'est certainement dans le sens de ce que je cherche, mais je ne peux pas tester pour le moment. En supposant que votre réponse fonctionne, je ne suis toujours pas sûr de savoir pourquoi il existe une classe BasesfGuardUser, puis une classe sfGuardUser. Pour moi, il est absolument logique que mes changements soient dans la classe sfGuardUser, mais cela ne semble pas fonctionner. Il n'a même pas l'air d'être instancié, ce qui pourrait être un problème pour plus tard. – Serg

+0

La classe de base ne doit jamais être touchée. Le pluton utilise le formulaire utilisateur admin pour l'édition dans la zone d'administration. C'est parce qu'il fait ses propres choses je suppose plutôt. Cela signifie que vous devez vraiment apporter des modifications à l'édition de la zone d'administration. – johnwards

+0

Excusez les fautes de frappe, je suis sur mon téléphone ... – johnwards

0

Essayez d'éditer le

lib/vendor/symfony/lib/plugins/sfDoctrineGuardPlugin/lib/form/doctrine/PluginsfGuardUserForm.class.php

"vendeur" et "symfony" sera ce que vous avez comme sur votre installation. Cela a fonctionné pour moi quand j'ai voulu enlever le me souviens de la case du formulaire de connexion:

<?php 

/** 
* sfGuardFormSignin for sfGuardAuth signin action 
* 
* @package sfDoctrineGuardPlugin 
* @subpackage form 
* @author  Fabien Potencier <fabien.potencie[email protected]> 
* @version SVN: $Id: sfGuardFormSignin.class.php 23536 2009-11-02 21:41:21Z Kris.Wallsmith $ 
*/ 
class sfGuardFormSignin extends BasesfGuardFormSignin 
{ 
    /** 
    * @see sfForm 
    */ 
    public function configure() 
    { 
    $this->widgetSchema->setFormFormatterName('list'); 
    unset($this['remember']); 
    } 
} 

Était aussi simple que cela.

Hope it helps

Luke

+0

Merci pour votre réponse. j'ai cherché et trouvé PluginsfGuardUserForm.class.php ici: plugins/sfDoctrineGuardPlugin/lib/form/doctrine/PluginsfGuardUserForm.class.php je aussi cherché lib/vendor/symfony/lib/plugins/sfDoctrineGuardPlugin/lib/form/doctrine mais ne semble pas avoir ce répertoire. Je aller aussi loin que lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/form qui contient 2 fichiers: sfFormDoctrine.class.php sfFormFilterDoctrine.class.php donc toujours coincé malheureusement. – Serg

+0

Avez-vous essayé d'éditer le pluginsfGuardUserForm.class.php que vous avez trouvé? Si oui, rien ne s'est passé? Il se peut que nous ayons des structures de répertoires légèrement différentes. – Luke