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 :

Modèle de départ d'un projet


Sujet :

Symfony PHP

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Par défaut Modèle de départ d'un projet
    Bonjour tout le monde.
    Je m'appelle Adel je suis étudiant en licence pro intranet extranet à l'iut Orléans informatique.

    Je suis actuellement en train de travailler sur un site web. Je débute sous symfony.
    J'ai déjà suivi les tuto Askeet et Jobeet, assez difficilement mais j'ai été au bout.

    Je souhaiterai développer une base de site web simple permettant d'avoir un backend dans lequel l'admin du site peut ajouter facilement des catégories, des sous catégories, et des "articles".
    Les articles correspondent en fait aux contenus des pages identifiées par leurs sous-catégories qui elles même appartiennent à une catégorie.

    A terme le frontend serai un simple site affichant un menu horizontal en header. Lorsqu'une sous categorie est selectionée, la page affiche l'article correspondant.

    Je ne suis évidement pas la pour demander à ce qu'on me mâche le travail. J'aurai très bien pu faire ce site en php mysql hyper rapidement sans framework. Mais je veux m'en servir pour apprendre symfony et avancer.
    J'aimerai donc savoir si je pouvais avoir vote avis sur ce modèle YAML et ensuite me conseiller dans quel sens partir pour mener au mieux le développement de ce mini projet.

    Mon YAML :

    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
     
    # config/doctrine/schema.yml
    categorie:
      actAs: { Timestampable: ~ }
      columns:
        nom: { type: string(255), notnull: true, unique: true }
     
     
     
    souscategorie:
      actAs: { Timestampable: ~ }
      columns:
        nom: { type: string(255), notnull: true, unique: true }
        parentid: { type: integer, notnull: true }
      relations:
        categorie: { onDelete: CASCADE, local: parentid, foreign: id, foreignAlias: souscategories }
     
     
     
     
     
     
    article:
      actAs: { Timestampable: ~ }
      columns:
        categorieid:  { type: integer, notnull: true, unique: true }
        content:  { type: string(4000), notnull: true }
        urlgimg:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        urlpimg1:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        urlpimg2:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        souscategorie: { onDelete: CASCADE, local: categorieid, foreign: id, foreignAlias: articles }
    Merci d'avance pour vos contributions.

    Adel

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Il me semble que ce comportement Doctrine pourrait t'intéresser : http://www.doctrine-project.org/docu...ors:softdelete. Le softdelete : impossible de supprimer un enregistrement (sauf à attaquer directement en SQL), tu as un champ deleteDate (ou approchant) permettant de savoir si et quand l'enregistrement a été supprimé. Ça risque de t'être utile dans ce genre d'applications (comment éviter des pertes de onnées...).

    À part ça, utilise tout ce qui est par défaut dans Doctrine et simplifie beaucoup ton schéma. Par exemple, AFAIK, ces parties sont inutiles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
    (Incrémenter une string ? ça n'a pas de sens !)

    Pour ton backend, ça sera fait en deux temps-trois mouvements : trois modules autogénérés, une page d'index, un template, fini.

    Pour ton frontend, une page d'index affichant les derniers articles, une colonne à droite pour afficher les catégories, avec lien vers les articles dans les catégories.

    Pour ton schéma, il me semble qu'il serait bien de factoriser les deux tables categorie et souscategorie : il suffit de spécifier qu'une catégorie peut avoir un parent et tu factorises en augmentant fortement les possibilités de l'application. Aussi, une table qui gère des liens entre un article et un tag, pour que chaque article puisse avoir plusieurs tags (ou catégories).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    On va repartir sur les excellentes idée de doudou et les concrétiser dans un modèle Doctrine...

    Avant, je te conseillerait vivement le plugin sfDoctrineGuardPlugin qui va te générer la sécurité pour le backend. Ainsi que le plugin pmSuperfishMenuPlugin qui te permettra de générer facilement les menus des deux applications.

    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
     
    # config/doctrine/schema.yml
    categorie:
      actAs: 
        Timestampable: ~ 
        NestedSet:
          hasManyRoots: true
          rootColumnName: root_id
      columns:
        name: string(255)
        notnull: true
        unique: true
     
    article:
      actAs: 
        Timestampable: ~
      columns:
        categorie_id:
          type: integer
          notnull: true
        content:
          type: string(4000)
          notnull: true
        urlgimg:
          type: string(255)
        urlpimg1:
          type: string(255)
        urlpimg2:
          type: string(255)
      relations:
        categorie: 
          onDelete: CASCADE
          foreignAlias: articles
    Un peu clarifié. Les catégories en arbre, donc profondeur sans problèmes. J'ai viré un unique pour categorie_id qui ne permettait de mettre qu'un article par catégorie (dans ce cas, pourquoi faire une table article ?). categorie_id est la norme sous doctrine pour un champ de liaison, ce qui permet d'alléger la définition du lien.

    Reste les trois zones urlpimg qui me gènes... d'où une autre version du schéma :
    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
     
    # config/doctrine/schema.yml
    categorie:
      actAs: 
        Timestampable: ~ 
        NestedSet:
          hasManyRoots: true
          rootColumnName: root_id
      columns:
        name: string(255)
        notnull: true
        unique: true
     
    article:
      actAs: 
        Timestampable: ~
      columns:
        categorie_id:
          type: integer
          notnull: true
        content:
          type: string(4000)
          notnull: true
      relations:
        categorie: 
          onDelete: CASCADE
          foreignAlias: articles
     
    urlpimg:
      columns:
        article_id: integer
        position: integer(2)
        url: string(255)
      relations:
        article:
          onDelete: CASCADE
          foreignAlias: urlpimgs
    Plus conforme aux formes normales.

    Bon, après, il va falloir un peu creuser pour gérer automatiquement la position... et inclure plusieurs form urlpimg dans la form article...
    Toutes choses simples. Et après tout, tu es la pour apprendre

    Mais avec cela tu devrais avoir déjà un shema.yml résistant.

    Symfony 1.4.8, php 5.2.3 ou plus, Mysql ou SqLite, apache 2.

    De quoi bien jouer...

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/08/2014, 12h21
  2. Aide pour départ d'un projet
    Par Spy-ST dans le forum C++
    Réponses: 6
    Dernier message: 14/01/2007, 23h44
  3. [outil] Aide pour le départ d'un projet
    Par bitardo dans le forum C++
    Réponses: 2
    Dernier message: 08/01/2007, 14h41
  4. Création d'un modèle de projet .
    Par Cédric_07 dans le forum MFC
    Réponses: 2
    Dernier message: 15/09/2004, 14h11

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