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

Langage PHP Discussion :

Faire passer une méthode d'une class dans un array d'une autre class


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut Faire passer une méthode d'une class dans un array d'une autre class
    Bonjour,



    J'ai une Class Rules_SignUP
    J'ai une Class Validator qui contient mes règles de validation

    J'aimerai pouvoir faire passer mes méthodes de validation (Validator) dans ma Class Rules_SignUp


    ?>
    [/CODE]

    Class Rules_SignUp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    
    class Rules_SignUp extends Rules_Abstract {
    	
    	public function build() {
    		$this->addField('nom', ['test1 - comment transmettre la méthode ', 'test2', 'test3']); // comment passer les différentes méthodes de ma class Validator
    		
    	}
    }
    
    
    ?>

    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
     
    class Validator {
     
       private $newData = [];  
       private $signUp;        
       private $errors = [];  
     
     
       public function isRequired($post){
       }
     
       public function isAlpha($post){
     
       }
     
    //.......

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut
    Pour ceux qui cela pourrait intéresser :


    const CHECK_ISREQUIRED = 'isrequired';

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function build() {
    		$this->addField('nom', [Validator::CHECK_REQUIRED, .....); 
    	}

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    je comprends ce que tu veux faire mais ta soluce est sacrément bancale.
    Déjà tu peux directement passer le nom de la fonction 'isRequired' et puis tu t'es posé la question de savoir comment enchaîner les tests de validation tout en ayant la possibilité de passer des paramètres à chaque validateur si cela est nécessaire.

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut
    merci pour votre retour

    j'essaie de faire ceci en cherchant une méthode validate()

    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
    <?php
    
    class Validator {
    
    const CHECK_REQUIRED = 'isRequired';
    const CHECK_ISALPHAM = 'isAlphaM'; 
    
    
       private $newData = [];  // variable qui stockera les nouvelles données validées et nettoyées
       private $form;              //variable qui stockera l'OBJET issu de l'instanciation de la class Rules_SignUP
       private $errors = [];
    
    
       public function __construct($form, $post) {
            $this->form = $form; 
            $this->newData = $post; 
       }
    
    
          public function isRequired($value){
               if(!empty(trim($value))) {
                   return $value;
               } else {
                   return false;
               }
          }
        
        public function isAlphaM($value){
                 $value = $this->($value);
                 if (!preg_match('/^[A-Z\'-_]{2,30}$/', $value)) {
                     return false;
                 } else {
                     return $value;
                 }
        }
       
    
    
       public function isValid() {  
            return empty($this->errors);
        }
    
        public function getErrors() {
            return $this->errors;
        }
    
        public function getNewData() { 
            return $this->newData; 
        }
    
    
        public function validate() {
            
            foreach ($this->form->getField() as $name => $rules)            // ON BOUCLE SUR LES CHAMPS -> $name -> règles ($rules[] => 1 ou ++ constantes) 
            {
             // echo " Index du champ : " .$name. "<br>"; 
    
                foreach($rules as $rule)                                    // ON BOUCLE SUR $rules[] ($rule = 1 constante = une règle )
                {
                  //echo " - règle(s) de validation : " .$rule. "<br>"; 
    
       
                 //MANQUE A LANCER LES TESTS ????? SI VOUS AVEZ UNE PROPOSITION 
                  //$this->newData = $this->{$rule};                        
    
     
                  if ($this->newData == false){                                       // chaque règle retourne $value de $name en cas de succès sinon FALSE en cas d'erreur de validation
                    $this->errors[] = 'KO'; 
                  } else {
                    $this->newData[$name] = $this->newData;                 // on stocke chaque champ validé et sécurisé dans la variable générale $newData = [],
                  }
                } 
            } 
    
             /*foreach ($this->newData as $name => $value) {  // pour moi 
              echo " index du champ du POST est : " .$name.  " &nbsp;&nbsp - &nbsp;&nbsp et sa valeur est :  " .$value. "<br>";
              //$name = $this->{$rule};
              }   */
        }
    
    
        public function hydrate (array $donnees) {
          foreach ($donnees as $key => $value) {
            $setter = 'set'.ucfirst($key);
            if (method_exists($this, $setter)){
              $this->$setter($value);
            }
          }
        }
    LA CLASS RULES_SIGNUP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
     
    class Rules_SignUp extends Rules_Abstract {
     
    	// C'est ici qu'on rentre tous les champs ($name) et les règles de validation ($rules-> Validator::Constante) -- ou static ?? comment faire
    	public function build() {
    		$this->addField('nom', [Validator::CHECK_REQUIRED, Validator::CHECK_ISALPHAM]);
    		$this->addField('prenom', [Validator::CHECK_REQUIRED]);
    	}
    }
    ?>
    Je n'arrive pas encore à lancer les tests dans ma fonction valide

    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
     
    <?php
     
     
    	require 'inc/Autoload.php'; 
     
    	// INSTANCIATION OBJET RULES_SIGNUP         - manque le passage des méthodes de validation dans $rules - Class Rules_SignUp
    	var_dump($form = new Rules_SignUp()); 
     
     
     
    	// INSTANCIATION OBJET VALIDATOR - manque getFields et Validate();  
    	//echo " Valeur de l'OBJET VALIDATOR  dans POST_INSCRIPTION (les 2 retours du constructeur Validator)  == <br><br> ";  
    	$validator = new validator($form, $_POST); 
    	//echo '<br>';
     
    	$validator->validate(); 
     
    		if (!$validator->isValid()) {
    		$array_errors = $validator->getErrors();  
     
    		foreach ($array_errors as $error => $value) {
    	        echo " champ qui a la key : {$error} => le contenu du message(valeur) : {$value}<br/> <br/>" ;
    	    	//print_r($array_errors);
    		} 
    	} else {
    		echo 'SUITE DU TRAITEMENT - ENREGISTREMENT'; 
    		// on RECOIT $newData[] -> données validées et nettoyées pour suite du  traitement 
    	}
    Voici mes retours

    C:\wamp64\www\test\VALIDATION\Post_Inscription.php:7:
    object(Rules_SignUp)[1]
    private 'fields' (Rules_Abstract) =>
    array (size=2)
    'nom' =>
    array (size=2)
    0 => string 'isRequired' (length=10)
    1 => string 'isAlphaM' (length=8)
    'prenom' =>
    array (size=1)
    0 => string 'isRequired' (length=10)


    Index du champ : nom
    - règle(s) de validation : isRequired

    Notice: Undefined property: Validator::$isRequired in C:\wamp64\www\test\VALIDATION\class\Validator.php on line 115
    - règle(s) de validation : isAlphaM
    Notice: Undefined property: Validator::$isAlphaM in C:\wamp64\www\test\VALIDATION\class\Validator.php on line 115
    Index du champ : prenom
    - règle(s) de validation : isRequired
    Notice: Undefined property: Validator::$isRequired in C:\wamp64\www\test\VALIDATION\class\Validator.php on line 115
    champ qui a la key : 0 => le contenu du message(valeur) : KO

    champ qui a la key : 1 => le contenu du message(valeur) : KO

    champ qui a la key : 2 => le contenu du message(valeur) : KO


    je bloque...merci pour vos conseils

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    bon comme t'es étudiant, je ne vais pas trop te faciliter la vie
    - Tu dois gagner en rigueur dans la manière de présenter ton code : tu adoptes une règle et tu la suis à la lettre (indentation, ouverture des accolades, tabulations, espaces...)
    - Si tu codes en PHP 7+, je t'invite à typer tes paramètres et tes fonctions.
    - Une fonction de validation ne doit retourner uniquement qu'un bool strict
    - Ta classe de validation ne doit pas hydrater quoi que ce soit, elle ne fait qu'un boulot et un seul : valider ce qu'on lui présente
    - Dans la même veine que juste au dessus, ta variable $newData n'a strictement rien à faire dans ta classe

    Attention avec empty() :
    The following values are considered to be empty:

    "" (an empty string)
    0 (0 as an integer)
    0.0 (0 as a float)
    "0" (0 as a string)
    NULL
    FALSE
    array() (an empty array)

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut
    Bonjour

    je ne suis pas étudiant mais un vrai débutant autodidacte et passionné depuis 6 mois et qui essaie de comprendre et de programmer modestement en POO..je cherche des ressources diverses pour m'enrichir mais inéluctablement je commets de nombreuses erreurs et il y a encore beaucoup de concepts qui m'échappent mais je suis qq'un d'acharné

    je ne suis pas contre un coup de main mais avec des commentaires pour appréhender la logique sous-jaccente

    Donc au regard de ma situation, déjà je vous remercie pour le temps que vous me consacrez

    J'utilise Sublime text et lorque je fais un copier-coller de mes codes, les indentations changent
    j'utilise php 5.6.31

    je modifierai mes codes en fonction de vos retour mais comment puis-je faire pour lancer mes tests et avoir les return (false ou true si j'ai bien compris). Je ne comprends pas comment faire ?

Discussions similaires

  1. appelle d'une méthode d'une autre classe dans ma classe
    Par EpiTouille dans le forum Débuter
    Réponses: 5
    Dernier message: 08/08/2013, 08h30
  2. Réponses: 2
    Dernier message: 17/05/2012, 01h18
  3. [Joomla!] appel de fonction d'une autre classe dans un autre fichier
    Par lkryss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 27/07/2007, 16h55
  4. [objet] appeler une méthode d'objets contenus dans un tableau (iterator ?)
    Par psychomatt dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/09/2006, 16h28
  5. Réponses: 2
    Dernier message: 21/07/2006, 06h55

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