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 :

Symfony 2 - Traitement des contraintes sur un objet. [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2011
    Messages : 45
    Points : 57
    Points
    57
    Par défaut Symfony 2 - Traitement des contraintes sur un objet.
    Bonjour,

    Mon cas de figure est le suivant:
    Le coté back-end (Symfony) de mon application reçoit des objets (stringifiés) du front-end (Dojo) en vue de les enregistrer dans la base de données.
    Au préalable, il convient de contrôler la validité de ces objets en les passant au filtre d'un certain nombre de contraintes.

    Depuis le controller du back-end, je ne vois qu'un objet auquel n'est associée aucune classe. Sauf à reconstituer la classe de l'objet, pour le besoin de la cause, je ne peux donc utiliser la fonctionnalité 'validator' fournie par Symfony.

    Pour une raison de clarté, j'ai regroupé les contraintes dans un fichier json situé dans le bundle Symfony approprié.

    Ma question est la suivante: mon approche est-elle pertinente, même question pour le choix du type de fichier json (il n'est question dans Symfony que de xml, yml etc..) et comment puis-je atteindre ce fichier de contraintes depuis une classe de service Symfony afin d'en exploiter le contenu ?

    Ma question va certainement paraître saugrenue aux spécialistes de PHP et je vous prie de m'en excuser car je ne suis précisément pas dans ce cas.

    Merci de votre aide.

    Caplande

  2. #2
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Caplande Voir le message
    Bonjour,

    Ma question va certainement paraître saugrenue aux spécialistes de PHP et je vous prie de m'en excuser car je ne suis précisément pas dans ce cas.

    Caplande
    t'inquiette c'est pas un problême de tous les jours

    Solution1:

    soit tu crée un formulaire (un form pas nécéssairement lié à une entité)

    Un exemple avec formbuilder dans un controlleur
    http://stackoverflow.com/questions/1...ntity-attached

    et tu ajoute les contreintes de validation de cette manière

    $builder->add('my_name', 'text', array(
    'constraints' => array(
    new \Symfony\Component\Validator\Constraints\NotBlank()
    )
    ));

    Après tu dois bricoler un peut l'objet Request dans ton controlleur pour binder les données (car tes données arrivent en post ou get d'une façon un peut particulière "stringuifié")

    Solution2:
    soit convertir tes données en objet json et les faire passer a un validateur du genre https://github.com/justinrainbow/json-schema

    CDT,

    Ahmed
    Je suis Développeur Senior ouvert aux opportunités
    Mon blog

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2011
    Messages : 45
    Points : 57
    Points
    57
    Par défaut
    Peut-être fais-je erreur, mais a priori, il me paraitrait beaucoup plus simple de créer une méthode au sein de la classe de service qui mettrait en confrontation les données reçues et l'ensemble des contraintes contenues dans le fichier json. Mais, dans ce cas, d'une part, comment accéder depuis la méthode au fichier json détenteur des contraintes, d'autre part à quel emplacement dans l'arborescence du projet, placer ce fichier pour respecter la philosophie de Symfony?

    Citation Envoyé par phpiste Voir le message
    t'inquiette c'est pas un problême de tous les jours

    Solution1:

    soit tu crée un formulaire (un form pas nécéssairement lié à une entité)

    Un exemple avec formbuilder dans un controlleur
    http://stackoverflow.com/questions/1...ntity-attached

    et tu ajoute les contreintes de validation de cette manière

    $builder->add('my_name', 'text', array(
    'constraints' => array(
    new \Symfony\Component\Validator\Constraints\NotBlank()
    )
    ));

    Après tu dois bricoler un peut l'objet Request dans ton controlleur pour binder les données (car tes données arrivent en post ou get d'une façon un peut particulière "stringuifié")

    Solution2:
    soit convertir tes données en objet json et les faire passer a un validateur du genre https://github.com/justinrainbow/json-schema

    CDT,

    Ahmed

  4. #4
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut
    tu créer un fichier TonBundle\Resources\config\jsonValidator\mySchema.json par exemple

    et en utilisant https://github.com/justinrainbow/json-schema

    <?php

    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
     
    MyService{
    protected function validate($jsonData)
    {
        // Get the schema and data as objects
        $retriever = new JsonSchema\Uri\UriRetriever;
        $schema = $retriever->retrieve('PATH-TO-THE-VALIDATOR-SCHEMA.json');
        $data = json_decode($jsonData);
     
        // Validate
        $validator = new JsonSchema\Validator();
        $validator->check($data, $schema);
     
        if ($validator->isValid()) {
            echo "The supplied JSON validates against the schema.\n";
        } else {
            echo "JSON does not validate. Violations:\n";
            foreach ($validator->getErrors() as $error) {
                echo sprintf("[%s] %s\n", $error['property'], $error['message']);
            }
        }
    }
    Je suis Développeur Senior ouvert aux opportunités
    Mon blog

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2011
    Messages : 45
    Points : 57
    Points
    57
    Par défaut
    Merci de ton aide.

    Lorsque json-schema est installé dans Symfony, celui-semble ne pas le reconnaître. En y regardant de plus près, je constate qu'il n'existe pas dans le projet de répertoire xxxxBundle (normalement, si je ne me trompe pas, qui devrait s'appeler: JsonSchemaBundle) qui permettrait à Symfony de l'identifier.

    Dans appKernel.php , il n'y a aucune trace de l'existence de ce module et l'instruction 'new JsonSchema\Uri\UriRetriever()' est en erreur car la classe UriRetriever n'est pas trouvée.
    En revanche lors de mes recherches en ligne , j'ai découvert l'existence d'un module KnpJsonSchemaBundle, je l'ai installé dans le projet mais ce bundle semble ne pas avoir les mêmes fonctionnalités.
    Je rame....


    Citation Envoyé par phpiste Voir le message
    tu créer un fichier TonBundle\Resources\config\jsonValidator\mySchema.json par exemple

    et en utilisant https://github.com/justinrainbow/json-schema

    <?php

    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
     
    MyService{
    protected function validate($jsonData)
    {
        // Get the schema and data as objects
        $retriever = new JsonSchema\Uri\UriRetriever;
        $schema = $retriever->retrieve('PATH-TO-THE-VALIDATOR-SCHEMA.json');
        $data = json_decode($jsonData);
     
        // Validate
        $validator = new JsonSchema\Validator();
        $validator->check($data, $schema);
     
        if ($validator->isValid()) {
            echo "The supplied JSON validates against the schema.\n";
        } else {
            echo "JSON does not validate. Violations:\n";
            foreach ($validator->getErrors() as $error) {
                echo sprintf("[%s] %s\n", $error['property'], $error['message']);
            }
        }
    }

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2011
    Messages : 45
    Points : 57
    Points
    57
    Par défaut
    Je viens de regarder attentivement le principe de fonctionnement de JsonSchema et je n'ai pas trouvé le moyen de l'utiliser dans mon contexte qui est le suivant:
    Un objet array est reçu du front-end. Les attributs de cet objet ne peuvent pas prendre n'importe quelle valeur, autrement dit, ses attributs ont des valeurs liées. Il est de la forme:

    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
    [
    	{	"naImId":11,
    		"bloc2":		{"idVA":"^[1-3]$"},
    		"bloc3":		{"idVA":"^[4-6]$"},
    		"oi":			{"idVA":"^1$|^[1-9][0-9]{0,2}$"},
    		"commerce":		{"idVA":"^2$|^[2-9][0-9]{0,3}$"},
    		"famille":		{"idVA":"^2$|^[2-9][0-9]{0,2}$"}
    	},
    	{	"naImId":51,
                    "bloc2":		{"idVA":"^[1-3]$"},
                    "bloc3":		{"idVA":"^[4-6]$"},
                    "oi":			{"idVA":"^1$|^[1-9][0-9]{0,2}$"},
                    "commerce":		{"idVA":"^2$|^[2-9][0-9]{0,3}$"},
                    "famille":		{"idVA":"^2$|^[2-9][0-9]{0,2}$"}
            },
    	{	"naImId":21,
    		"bloc2":		{"idVA":"^[1-2]$"},
    		"bloc3":		{"idVA":"^3$"},
    		"oi":			{"idVA":"^1$"},
    		"commerce":		{"idVA":"^1$"},
    		"famille":		{"idVA":"^1$"}
    	},
    	{	"naImId":31,
    		"bloc2":		{"idVA":"^[1-3]$"},
    		"bloc3":		{"idVA":"^[1-3]$"},
    		"oi":			{"idVA":"^1$"},
    		"commerce":		{"idVA":"^1$"},
    		"famille":		{"idVA":"^1$"}
     
    	},
    	{	"naImId":41,
    		"bloc2":		{"idVA":"^[1-2]$"},
    		"bloc3":		{"idVA":"^[1-2]$"},
    		"oi":			{"idVA":"^1$"},
    		"commerce":		{"idVA":"^1$"},
    		"famille":		{"idVA":"^1$"}
    	}
    ]
    Je ne vois pas comment Validator peut être utile dans ce cas de figure.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des properties sur les objets handle
    Par lince102 dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 12/12/2007, 10h31
  2. Ordre de traitement des opérateurs sur un select
    Par tchoimars dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/05/2007, 18h42
  3. Demande un Logiciel de traitement des graphes sur linux
    Par razouk dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 09/05/2006, 20h45
  4. Réponses: 11
    Dernier message: 13/04/2006, 15h18
  5. SQLServer 2000: Liste des contraintes sur une colonne ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2005, 16h13

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