2011-03-02 3 views
0

J'utilise symfony 1.4.8. J'ajoute ReCaptcha à mon formulaire, en utilisant SfExtraFormPlugin. Je widget et validateur pour dans mon "public function configure()"Validateurs Symfony, widgets pour backend

....  
$this->widgetSchema['captcha'] = new sfWidgetFormReCaptcha(array(
     'public_key' => sfConfig::get('app_recaptcha_public_key') 
    )); 


$this->validatorSchema['captcha'] = new sfValidatorReCaptcha(array(
     'private_key' => sfConfig::get('app_recaptcha_private_key') 
    )); 
... 

J'ai aussi l'application back-end, et mon "public function configure()" pour elle:

public function configure() 
    { 
    parent::configure(); 
.... 
} 

Donc quand je veux ajouter un message de mon backend j'ai une erreur: L'article n'a pas été sauvegardé à cause d'erreurs. Existe-t-il un moyen de supprimer le widget et les validateurs pour ReCaptcha uniquement à mon backend? Maintenant, je ne vois qu'une seule façon, c'est de supprimer

parent :: configure();

et écrire tous les widgets et validateurs backend séparément du widget frontend et validateurs .. :( ps Désolé pour mon mauvais anglais pps Merci d'avance pour vos réponses

Répondre

2

Ajouter une option à votre forme. Lorsque vous l'instanciez, vous devez savoir si vous êtes sur le backend ou sur le frontend.

// in your actions.class.php 
$this->form = new MyForm(null, array('from_backend' => true)); // or false... 

// in your form 
if (!$this->getOption('from_backend')) 
{ 
    // add the recaptcha widget and validator... 
} 

Il devrait fonctionner :)

0

Je trouve la deuxième façon:

if (sfConfig::get('sf_app') == "frontend") 
{ 
    widget and validator 
} 
elseif (sfConfig::get('sf_app') == "backend") 
{ 
    widget and validator 
} 
+0

De cette façon, n'est pas recommandé. Votre formulaire n'est pas censé connaître l'environnement. C'est le travail du contrôleur de le lui dire. – Gregoire

Questions connexes