IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

The item has not been saved due to some errors


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Points : 64
    Points
    64
    Par défaut The item has not been saved due to some errors
    Bonjour à tous !

    Me voilà face à un problème, et je ne vois pas comment le résoudre.

    J'ai crée mon backend avec l'admin generator.
    Je n'ai pas de formulaires dans mon frontend, j'en ai juste dans mon backend.

    J'ai une classe TSoudure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    TSoudure:
      connection: doctrine
      tableName: TSoudure
      columns:
        numsoudure:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: true
          autoincrement: true
        tmedaille_nummedaille:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        numordre:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        distpreforgeage:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        distrefoulement:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        presscontact:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        pressrefoulement:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        tpschauffe:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        tpsforgeage:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
        iscoupon:
          type: integer(1)
          fixed: false
          unsigned: false
          primary: false
          default: '0'
          notnull: false
          autoincrement: false
        numcoupon:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          default: '0'
          notnull: false
          autoincrement: false
        cb_gauche:
          type: string(16)
          fixed: false
          unsigned: false
          primary: false
          default: INCONNU
          notnull: false
          autoincrement: false
        cb_droite:
          type: string(16)
          fixed: false
          unsigned: false
          primary: false
          default: INCONNU
          notnull: false
          autoincrement: false
      relations:
        TMedaille:
          local: tmedaille_nummedaille
          foreign: nummedaille
          type: one
        TTraitement:
          local: numsoudure
          foreign: tsoudure_numsoudure
          type: many
    Je veux que l'utilisateur puisse modifier seulement le NumSoudure, NumOrdre, TMedaille_NumMedaille, CB_Gauche et CB_Droite.

    Donc dans generator.yml, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    generator:
      class: sfDoctrineGenerator
      param:
        model_class:           TSoudure
        theme:                 admin
        non_verbose_templates: true
        with_show:             true
        singular:              ~
        plural:                ~
        route_prefix:          t_soudure
        with_doctrine_route:   true
        actions_base_class:    sfActions
     
        config:
          form:    ~
          edit:    
            title: Editer la soudure %%NumOrdre%% de la médaille %%TmedailleNummedaille%% / Numéro de soudure: %%numsoudure%%
            display: [numsoudure, tmedaille_nummedaille, numordre, cb_gauche, cb_droite]
            fields:
              tmedaille_nummedaille: { label : N° de médaille }
              numordre: { label: N° Ordre }
              cb_gauche: { label : CB Gauche }
    Quand j'edite une numéro de soudure, il y a bien juste les champs souhaités qui s'affichent, le problème c'est que quand j'essaies d'en modifier un ou juste de cliquer directement sur SAVE.

    J'obtiens The item has not been saved due to some errors

    Je pense que c'est parce que mes éléments "required" ne sont pas redonnés.
    Je ne sais pas comment faire pour que ça marche.

    Qqun peut m'aider svp ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    J'ai réussi à ne plus avoir l'erreur mais je ne sais pas si c'est la bonne solution. Dans BaseTSoudureForm, j'ai mis en commentaires ce que je n'avais pas dans mon formulaire. Comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
     
    /**
     * TSoudure form base class.
     *
     * @method TSoudure getObject() Returns the current form's model object
     *
     * @package    monProjet
     * @subpackage form
     * @author     Your name here
     * @version    SVN: $Id: sfDoctrineFormGeneratedTemplate.php 24171 2009-11-19 16:37:50Z Kris.Wallsmith $
     */
    abstract class BaseTSoudureForm extends BaseFormDoctrine
    {
      public function setup()
      {
        $this->setWidgets(array(
          'numsoudure'            => new sfWidgetFormInputHidden(),
          /*'tmedaille_nummedaille' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('TMedaille'), 'add_empty' => false)),*/
          'tmedaille_nummedaille' => new sfWidgetFormInputText(),
          'numordre'              => new sfWidgetFormInputText(),
          /*'distpreforgeage'       => new sfWidgetFormInputText(),
          'distrefoulement'       => new sfWidgetFormInputText(),
          'presscontact'          => new sfWidgetFormInputText(),
          'pressrefoulement'      => new sfWidgetFormInputText(),
          'tpschauffe'            => new sfWidgetFormInputText(),
          'tpsforgeage'           => new sfWidgetFormInputText(),
          'iscoupon'              => new sfWidgetFormInputText(),
          'numcoupon'             => new sfWidgetFormInputText(),*/
          'cb_gauche'             => new sfWidgetFormInputText(),
          'cb_droite'             => new sfWidgetFormInputText(),
        ));
     
        $this->setValidators(array(
          'numsoudure'            => new sfValidatorDoctrineChoice(array('model' => $this->getModelName(), 'column' => 'numsoudure', 'required' => false)),
          /*'tmedaille_nummedaille' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('TMedaille'))),*/
          'tmedaille_nummedaille' => new sfValidatorInteger(),
          'numordre'              => new sfValidatorInteger(),
          /*'distpreforgeage'       => new sfValidatorInteger(),
          'distrefoulement'       => new sfValidatorInteger(),
          'presscontact'          => new sfValidatorInteger(),
          'pressrefoulement'      => new sfValidatorInteger(),
          'tpschauffe'            => new sfValidatorInteger(),
          'tpsforgeage'           => new sfValidatorInteger(),
          'iscoupon'              => new sfValidatorInteger(array('required' => false)),
          'numcoupon'             => new sfValidatorInteger(array('required' => false)),*/
          'cb_gauche'             => new sfValidatorString(array('max_length' => 16, 'required' => false)),
          'cb_droite'             => new sfValidatorString(array('max_length' => 16, 'required' => false)),
        ));
       ...
      }
     
     
    }
    Mais je ne pense pas que ce soit la bonne méthode. Donc j'attends tout de même votre aide.

    Et petite question en plus.
    J'aimerais vérifier avant d'enregistrer les données du formulaire, que ce que l'utilisateur a rentré n'écrase pas une autre donnée. Où dois-je faire ces vérifications ?
    Dans backend/modules/mon_module/actions/actions.class.php ?

  3. #3
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Première question.

    Je n'ai pas creusé tous ton schéma, mais tu y déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        distpreforgeage:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: false
          notnull: true
          autoincrement: false
    Hors dans les champs que tu veux saisir, tu ne veux pas saisir celui-ci. Tu lui demandes donc de valider un enregistrement avec des données qui ne peuvent être null et que tu ne renseigne pas. Il est possible qu'il y ai d'autre champs dans ce cas, je n'ai pas vérifié tous le schéma, il est possible qu'il y ait d'autre champs dans le même cas. Soit tu met des valeurs par défaut, soit tu modifies le save de l'objet pour attribuer des valeurs, soit tu retire le "notnull:true"


    Deuxième question
    Modification du "BaseTSoudureForm" pour lequel tu dis : "Mais je ne pense pas que ce soit la bonne méthode". Et bien tu as raison, c'est une très mauvaise idée. Il ne faut jamais modifier un Base>quelquechose>.class.php, sauf exception pour le "BaseForm.class.php" qui est le père de tous les autres "Base..." et permet donc de mettre un méthode commune à tous les objets du modèle.


    Troisième question
    Je pense que le plus simple serait de créer un index unique sur les cinq champs en question.
    Une deuxième solution serait de créer un validateur qui vérifie l'unicité, mais c'est un peu plus compliqué et devrait, par sécurité, être couplé avec la première solution.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    En fait, j'ai modifié TSoudureForm.class.php avec la fonction configure() et ça marche très bien.

    Est-il possible de modifier l'action sur bouton save dans les formulaires du backend?

    J'aimerais faire plusieurs vérifications avant d'exécuter ou non ma requête.
    Et peut-on faire des requêtes dans la backend de la même manière que dans le frontend ? Je pense que oui mais sait-on jamais !

    Merci d'avance

  5. #5
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Citation Envoyé par symff Voir le message
    Est-il possible de modifier l'action sur bouton save dans les formulaires du backend?
    Oui, mais est-ce la bonne solution ?

    L'objet form est un peu particulier en ce qu'il est à cheval sur les couches C (contrôleur) et V (visuel) du framework.

    Si tu modifie l'action save pour tripatouiller les données, tu vas lui rajouter une troisième patte dans la partie M (modèle) et générer un vrai cheval à trois pates !

    Si tes modifications concernent tous les ajouts sur cette table, il serait plus sains de modifier l'objet du modèle ainsi, quelque soit la partie d'où vient l'ajout, les contrôles et valeurs par défaut seront prises en compte.

    Citation Envoyé par symff Voir le message
    J'aimerais faire plusieurs vérifications avant d'exécuter ou non ma requête.
    Et peut-on faire des requêtes dans la backend de la même manière que dans le frontend ? Je pense que oui mais sait-on jamais !
    En fait il n'y a aucune différence entre l'application backend, l'application frontend et d'éventuelles autres applications créées. Ce sont tous des applications.

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par symff Voir le message
    Est-il possible de modifier l'action sur bouton save dans les formulaires du backend?
    Lorsque tu cliques sur le bouton 'sauvegarder', l'application appelle la méthode executeUpdate() de l'action de ton module. Tu peux la surcharger comme toute autre méthode dans une action 'normale'.
    Si tu veux récupérer le code 'modèle', il faut aller chercher dans le cache, quelque chose comme : cache/backend/dev/modules/autoMonmodule/action.class.php

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Ok merci à vous, je regarderais ça !

    Si vous avez des exemples, je suis tout de même preneuse !

Discussions similaires

  1. erreur "the module has not been deployed"
    Par sarra123 dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 16/05/2011, 12h47
  2. [1.x] Erreur:The item has not been saved due to some errors.
    Par moon22 dans le forum Symfony
    Réponses: 13
    Dernier message: 14/05/2011, 22h04
  3. message d'erreur <The module has not been deployed>
    Par dev_2007 dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 10/11/2010, 21h49
  4. message d'erreur <The module has not been deployed>
    Par alamako dans le forum Logging
    Réponses: 4
    Dernier message: 08/09/2010, 09h02
  5. Réponses: 1
    Dernier message: 02/04/2007, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo