La Ferme du web - Les forums

Venez baraguiner avec la communauté !

Vous n'êtes pas identifié.

#1 13/10/2009 23:11:26

Droup
Membre
Date d'inscription: 22/08/2009
Messages: 7

Validation du formulaire : Messages d'erreurs.

Bonjour, je rencontre un problème au niveau de la validation du formulaire :

Je me suis arrêté juste avant la partie :
Association automatique des données et exécution de la validation

Là, on apprend que si on teste, on va avoir le message suivant :

Code:

Call to undefined method membreActions::processForm.

J'ai donc testé, par curiosité, et chose étrange, je n'ai pas ce message d'erreur, mais en plus, j'ai un message d'erreur typique à PHP :

Code:

Warning: array_key_exists() [function.array-key-exists]: The first argument should be either a string or an integer in /usr/share/php/symfony/util/sfParameterHolder.class.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at /usr/share/php/symfony/util/sfParameterHolder.class.php:53) in /usr/share/php/symfony/response/sfWebResponse.class.php on line 335

Warning: Cannot modify header information - headers already sent by (output started at /usr/share/php/symfony/util/sfParameterHolder.class.php:53) in /usr/share/php/symfony/response/sfWebResponse.class.php on line 349

Pour commencer, voici mon fichier MembresForm.class.php :

Code:

/**
 * Membres form.
 *
 * @package    form
 * @subpackage Membres
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 6174 2007-11-27 06:22:40Z fabien $
 */
class MembresForm extends BaseMembresForm
{
  public function configure()
  {
    $this->setWidgets(array(
        'login'    => new sfWidgetFormInput(),
        'email'   => new sfWidgetFormInput(),
        'password' => new sfWidgetFormInputPassword(),
        'repassword' => new sfWidgetFormInputPassword(),
        'pays' => new sfWidgetFormI18nSelectCountry(array('culture' => sfContext::getInstance()->getUser()->getCulture())),
        'captcha'    => new sfWidgetFormInput()
    ));
    unset(
         $this["lvl"], $this["etat"],
         $this["id"], $this["ip_inscription"],
         $this["last_login"], $this["date_inscription"]
    );   
    $culture = sfContext::getInstance()->getUser()->getCulture();

    $this->widgetSchema->setFormFormatterName('list');
    $this->widgetSchema->setLabels(array(
        'login'    => 'Login',
        'email'   => 'Email address',
        'password' => 'Password',
        'repassword' => 'Retype password',
        'pays' => 'Country',
        'captcha' => 'Captcha',
    ));
    $this->widgetSchema->setHelp('repassword', 'Retype the previous password to prevent errors.');
    $this->widgetSchema->setHelp('email', 'Require a valid email address.');
    $this->widgetSchema->setHelp('login', 'Login between 3 and 20 alphanumerics characters.');
    
    if (strlen($culture) > 2) {
        $pays = strtoupper(substr($culture, -2, 2));
    }
    else {
        $pays = strtoupper($culture);
    }
    
    if ($pays == 'EN') $pays = 'GB';
    
    $this->setDefault('pays', $pays);

    $this->setValidators(array(
        'login'   => new sfValidatorAnd(array(
            new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 14)),
            new sfValidatorRegex(array('pattern' => '/^[a-zA-Z0-9-]+$/'))
        )),
        'password'   => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 20)),
        'repassword'   => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 20)),
        'email'   => new sfValidatorEmail(array('required' => true)),
        'pays'   => new sfValidatorString(array('min_length' => 2, 'max_length' => 2))
    ));
    $this->validatorSchema->setPostValidator(
        new sfValidatorSchemaCompare('password',  sfValidatorSchemaCompare::EQUAL, 'repassword')
    );
  }
}

Autre chose, dans la partie administration, si j'ajoute un membre, j'ai les mêmes messages.
Par contre si je mets en commentaire la partie suivante :

Code:

    $this->setWidgets(array(
        'login'    => new sfWidgetFormInput(),
        'email'   => new sfWidgetFormInput(),
        'password' => new sfWidgetFormInputPassword(),
        'repassword' => new sfWidgetFormInputPassword(),
        'pays' => new sfWidgetFormI18nSelectCountry(array('culture' => sfContext::getInstance()->getUser()->getCulture())),
        'captcha'    => new sfWidgetFormInput()
    ));

Le formulaire n'est pas correcte (Normal), mais j'arrive quand même à ajouter un membre.

Dernière chose, est-ce normal que je ne puisse travailler qu'avec les fichier backend_dev.php et frontend_dev.php ? Car si je vais directement à l'adresse : http://dev.watchmydesk.com/en/register.html j'ai une erreur 404 Not Found.

Merci d'avance pour vos réponses

Hors ligne

 

13/10/2009 23:11:26

Botte De Foin Publicitaire


#2 14/10/2009 09:50:49

DJo
Administrateur
Date d'inscription: 31/07/2008
Messages: 569
Site web

Re: Validation du formulaire : Messages d'erreurs.

ALors, la première erreur que tu as eu est normale, tu as du laissé dans ton fichier actions.class.php la fonction processForm. Dans le tuto, je l'avais commentée, mais ce n'est pas grave.

Pour le problème des 404, est-ce que tu as bien supprimé le cache Symfony ?
symfony cc

Sinon, fais moi voir ton fichier routing.yml dans le répertoire apps/frontend/config/

Hors ligne

 

#3 14/10/2009 19:28:33

Droup
Membre
Date d'inscription: 22/08/2009
Messages: 7

Re: Validation du formulaire : Messages d'erreurs.

En effet, le problème venait bien de cette fonction.
Maintenant ça marche.

Concernant l'erreur 404, j'ai bien fait symfony cc.

Voici mon routing.yml du frontend :

Code:

register:
  url: /:sf_culture/register.html
  param: { module: membre, action: new }
  requirements:
    sf_culture: (?:fr|en)
    
browse:
  url: /:sf_culture/workstations.html
  param: { module: bureau, action: list }
  requirements:
    sf_culture: (?:fr|en)
    
login:
  url: /:sf_culture/login.html
  param: { module: membre, action: login }
  requirements:
    sf_culture: (?:fr|en)
    
share:
  url: /:sf_culture/share.html
  param: { module: bureau, action: new }
  requirements:
    sf_culture: (?:fr|en)
    
change_language:
  url: /change_language
  param: { module: language, action: changeLanguage }

create_account:
  url: /:sf_culture/create_account.html
  param: { module: membre, action: create }
  requirements:
    sf_culture: (?:fr|en)

localized_homepage:
  url: /:sf_culture/
  param: { module: main, action: index }
  requirements:
    sf_culture: (?:fr|en)

homepage:
  url: /
  param: { module: main, action: index }

#default_index:
#  url:   /:module
#  param: { action: index }

#default:
#  url:   /:module/:action/*

Hors ligne

 

#4 14/10/2009 20:21:50

DJo
Administrateur
Date d'inscription: 31/07/2008
Messages: 569
Site web

Re: Validation du formulaire : Messages d'erreurs.

Ok, maintenant, execute la même adresse avec frontend_dev.php et dis moi ce que tu as, si tu as une erreur Symfony ou pas.

Hors ligne

 

#5 14/10/2009 20:45:42

Droup
Membre
Date d'inscription: 22/08/2009
Messages: 7

Re: Validation du formulaire : Messages d'erreurs.

Avec frontend_dev.php, je ne rencontre aucun problème.
C'est comme ça, que j'ai put continuer ton tutoriel.

Hors ligne

 

#6 14/10/2009 21:55:54

DJo
Administrateur
Date d'inscription: 31/07/2008
Messages: 569
Site web

Re: Validation du formulaire : Messages d'erreurs.

Ok, alors fait moi voir ton fichier actions.class.php du module membre

Mais c'est quand même mystérieux ton affaire, si ça passe en frontend et pas en normal et que tu as bien supprimer le cache...
Tu utilises les bons droits pour supprimer le cache ? le bon utilisateur ?

Hors ligne

 

#7 14/10/2009 22:16:52

Droup
Membre
Date d'inscription: 22/08/2009
Messages: 7

Re: Validation du formulaire : Messages d'erreurs.

Voici le script action.class.php du module membre :

Code:

<?php

/**
 * membre actions.
 *
 * @package    watchmydesk
 * @subpackage membre
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
 */
class membreActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->membres_list = Doctrine::getTable('Membres')
      ->createQuery('a')
      ->execute();
  }

  public function executeShow(sfWebRequest $request)
  {
    $this->membres = Doctrine::getTable('Membres')->find(array($request->getParameter('id')));
    $this->forward404Unless($this->membres);
  }

  public function executeNew(sfWebRequest $request)
  {
    $this->form = new MembresForm();
  }

  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod('post'));

    $this->form = new MembresForm();

    $this->processForm($request, $this->form);

    $this->setTemplate('new');
  }

  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($membres = Doctrine::getTable('Membres')->find(array($request->getParameter('id'))), sprintf('Object membres does not exist (%s).', array($request->getParameter('id'))));
    $this->form = new MembresForm($membres);
  }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod('post') || $request->isMethod('put'));
    $this->forward404Unless($membres = Doctrine::getTable('Membres')->find(array($request->getParameter('id'))), sprintf('Object membres does not exist (%s).', array($request->getParameter('id'))));
    $this->form = new MembresForm($membres);

    $this->processForm($request, $this->form);

    $this->setTemplate('edit');
  }

  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($membres = Doctrine::getTable('Membres')->find(array($request->getParameter('id'))), sprintf('Object membres does not exist (%s).', array($request->getParameter('id'))));
    $membres->delete();

    $this->redirect('membre/index');
  }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()));
    if ($form->isValid())
    {
      $membres = $form->save();

      $this->redirect('membre/edit?id='.$membres->getId());
    }
  }

}

Pour le cache, je viens de tester la commande en ajoutant sudo devant.
Je ne pense pas pouvoir faire mieux pour le cache.


Une dernière chose : Je viens de terminer tout le tutoriel (Bon, courage pour la suite), mais les messages d'erreurs s'affichent en anglais. et seul eux s'affichent en anglais, tout le reste est en français.
J'ai regardé dans le dossier cache, le fichier fr.cache, et les messages sont bien dedans.

Hors ligne

 

#8 25/10/2009 01:08:42

jylac
Membre
Lieu: ile de france
Date d'inscription: 25/10/2009
Messages: 16
Site web

Re: Validation du formulaire : Messages d'erreurs.

Juste au passage, dans ton fichier routing.yml , j'ai pas vu :

create_account:
  url: /:sf_culture/create_account.html
  param: { module: membre, action: create }
  requirements:
    sf_culture: (?:fr|en)

Hors ligne

 

#9 25/10/2009 10:27:31

Droup
Membre
Date d'inscription: 22/08/2009
Messages: 7

Re: Validation du formulaire : Messages d'erreurs.

Il y est : ligne 29.

Dernière modification par Droup (25/10/2009 10:27:42)

Hors ligne

 

#10 25/10/2009 17:55:05

DJo
Administrateur
Date d'inscription: 31/07/2008
Messages: 569
Site web

Re: Validation du formulaire : Messages d'erreurs.

Si ca marche en frontend_dev et pas normalement, ca vient forcément du cache.
Regarde bien que tu es les bons droits lorsque tu execute la commande "symfony cc"

Met toi en root pour être sûr sinon ...

Hors ligne

 

#11 25/10/2009 21:42:39

Droup
Membre
Date d'inscription: 22/08/2009
Messages: 7

Re: Validation du formulaire : Messages d'erreurs.

Je travaille sur une machine ubuntu, il n'y a donc pas d'utilisateur root, mais la commande sudo suffit amplement pour avoir les droits de root.

Je ne comprends donc pas d'où peux venir le problème.

Et concernant les traductions ?

Hors ligne

 

#12 25/11/2009 16:42:15

beurre-volant
Membre
Date d'inscription: 13/07/2009
Messages: 2

Re: Validation du formulaire : Messages d'erreurs.

Salut à tous,

J'ai eu le même soucis que Droup et j'ai demandé de l'aide à un ami qui utilise souvent Symfony.

Il a réussi à résoudre ce problème en changeant l'ordre des commandes dans le fichier MembresForm a

En gros, le découpage du code se fait :
- Les "unset"
- Le setWidget()
- Les validateurs
- Les widgetSchema()

Code:

<?php

/**
 * Membres form.
 *
 * @package    form
 * @subpackage Membres
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 6174 2007-11-27 06:22:40Z fabien $
 */
class MembresForm extends BaseMembresForm
{
  public function configure()
  {
      parent::configure();
      unset($this["lvl"],$this["etat"],$this["id"],$this["ip_inscription"],$this["last_login"],$this["date_inscription"]);

      $culture = sfContext::getInstance()->getUser()->getCulture();

      // Définition des widgets

      $this->setWidgets(array(
        'login'    => new sfWidgetFormInput(),
        'email'   => new sfWidgetFormInput(),
        'pass' => new sfWidgetFormInputPassword(),
        'repassword' => new sfWidgetFormInputPassword(),
        'pays' => new sfWidgetFormI18nSelectCountry(array('culture' => sfContext::getInstance()->getUser()->getCulture()))
      ));

      // Validateurs

      $this->setValidators(array(
        'login' => new sfValidatorAnd(array(
                        new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 14)),
                        new sfValidatorRegex(array('pattern' => '/^[a-zA-Z0-9-]+$/'))
                    )),
        'pass' => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 20)),
        'repassword' => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 20)),
        'email' => new sfValidatorEmail(array('required' => true )),
        'pays' => new sfValidatorString(array('min_length' => 2, 'max_length' => 2))        
        ));
      $this->validatorSchema->setPostValidator(new sfValidatorSchemaCompare('pass', sfValidatorSchemaCompare::EQUAL, 'repassword'));
      
      // Schéma
      
      $this->widgetSchema->setLabels(array(
        'login' => 'Login',
        'email' => 'Email address',
        'pass' => 'Password',
        'repassword' => 'Retype password',
        'pays' => 'Country',
        ));
      $this->widgetSchema->setHelp('repassword', 'Retype the previous password to prevent errors.');
      $this->widgetSchema->setHelp('email', 'Require a valid email address.');
      $this->widgetSchema->setHelp('login','Login between 3 and 20 alphanumerics characters.');
  
      if (strlen($culture) > 2)
      {
          $pays = strtoupper(substr($culture,-2,2));
      }
      else
      {
          $pays = strtoupper($culture);
      }
      if ($pays == 'EN' ) $pays = 'GB';
     
      $this->setDefault('pays',$pays);
     
    
     $this->widgetSchema->setNameFormat('membre[%s]');
     $this->widgetSchema->setFormFormatterName('list');
  }
}

Hors ligne

 

#13 17/09/2012 16:25:08

Tarouk17
Membre
Date d'inscription: 17/09/2012
Messages: 2

Re: Validation du formulaire : Messages d'erreurs.

BJ a tous

lorsque je fais un test d'ajout d'un ,membre  j'aurais ce msg d'erreur

"Warning: array_key_exists(): The first argument should be either a string or an integer in /usr/share/php/symfony/util/sfParameterHolder.class.php on line 53 "


Quelqu'un peux m'aider  a resoudre ce pb et merci ?

Hors ligne

 

#14 08/05/2017 04:30:09

diwh
Membre
Date d'inscription: 05/05/2017
Messages: 3

Re: Validation du formulaire : Messages d'erreurs.

Ok, maintenant, execute la même adresse avec frontend_dev.php et dis moi ce que tu as, si tu as une erreur Symfony ou pas.

Hors ligne

 

Pied de page des forums

Powered by FluxBB
© Copyright 2008-2009 - LaFermeduWeb.net