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

PHP & Base de données Discussion :

Discussion : quelle architecture standard quand on n'utilise pas de framework PHP ?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut Discussion : quelle architecture standard quand on n'utilise pas de framework PHP ?
    Bonjour,

    Mettons que pour standardiser l'ossature des mes projets personnels sur des petits développements que je fais seule, j'aie envie d'adopter la philosophie MVC sans la lettre.

    Que dites vous de cette architecture standard ?
    Pour simplifier : les répertoires, les fichiers et quelques méthodes principales

    - classes (partie parfaitement commune à tous les sites => reusable tel quel)

    --- Sql_connection.php (connexion à toutes les bases)

    --- Php_to_sql.php (tout le crud)
    ------ public function sql_read($pdo,$sql,$where=array()) (return l'array PHP)
    ------ public function sql_write($pdo,$sql,$where=array()) (return l'array PHP)

    --- Php_to_html.php (production de toutes les entités HTML)
    ------ public function array_to_table($data, $id='', $class='', $caption='') (return l'entité HTML promise)
    ------ public function array_to_list($data, $list_type='ul', $id='', $class='') (return l'entité HTML promise)
    ------ public function menu_onglets_dynamiques($url, array $menu) (return l'entité HTML promise)

    --- Php_only.php (ce qui peut etre utilisé partout ailleurs)
    ------ public function is_array_of_associative_arrays(array $array) (return true or false)
    ------ public function is_real_date ($date_type_sql) (return datetime or false)


    - www (partie différente pour chaque site = le nom des pages donnera la logique métier, ici je vous mets un exemple de site pour un syndicat de co-propriétaires)
    --- prestaire.php
    --- coproprietaire.php
    --- lot.php
    --- conseil_syndical.php
    --- batiment.php
    --- activite.php

    --- img

    --- style.css

    --- inc
    ------- menu_inc.php

    --- js_lib
    ------ jquery
    ------ d3.js

    --- php_lib
    ------ tcpdf
    ------ phpmailer
    ------ phpword
    ------ phpexcel

    --- config.php

    Contiendra ce genre de choses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*1) TRES IMPORTANT : EN PRODUCTION, PASSER CETTE CONSTANTE EN COMMENTAIRE*/
    //si true PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    define('DEV',true);
    /*1) FIN************************************************************************************/
    /*2) pour le template HTML*/
    define('SITE_URL','http://localhost/site_test/www');//le DNS pointe direct sur le répertoire www
    define('SITE_PATH','C:/wamp64/www/mon_site');//la racine du site en amont de www
    define('CUR_TITLE','nom_de_mon_appli');
    define('CUR_DESCRIPTION','nom_de_mon_appli : explication de l\'acronyme');
    define('CUR_AUTHOR','authored by Sylvie VAUTHIER, software engineer');
    define('CUR_ICO_PATH','./img/nom_de_mon_appli.png');
    define('CUR_COPYRIGHT','Copyright © '.date('Y').' Sylvie VAUTHIER');
    Voilà, je pense n'avoir rien oublié d'essentiel ?

    Exemple de page du site (batiment.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
    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
     
    <?php
    require('./config.php');
    spl_autoload_register(function ($class) {
      include '../classes/'.$class.'.php';
    });
    if( ! (defined('CUR_TITLE') && defined('CUR_DESCRIPTION') && defined('CUR_AUTHOR') && defined('CUR_ICO_PATH') && defined('CUR_COPYRIGHT'))){
      echo 'ERREUR ! Configuration du site incomplète !';
      exit;
    }
    $table='';
    $pts=new Php_to_sql(defined('DEV')?'DEV':'PROD');
    $scoop=$pts->local_connection();
    $data=$pts->sql_read($scoop,'select * from batiment');
    if(count($data)>0){
      $pth=new Php_to_html();
      $table=$pth->array_to_table($data,'batiment','tableau_par_defaut','Bâtiments');
    }
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    	<head>
    		<meta charset="utf-8">
    		<title><?php echo strtolower(CUR_TITLE);?></title>
    		<meta name="description" content="<?php echo CUR_DESCRIPTION;?>">
    		<meta name="author" content="<?php echo CUR_AUTHOR;?>">
    		<link rel="shortcut icon" href="<?php echo CUR_ICO_PATH;?>">
    		<link rel="stylesheet" href="style.css" media="screen">
    	</head>
    	<body>
    		<header>
          <p>
    			<?php 
          echo CUR_TITLE.'<br/>';
          echo CUR_DESCRIPTION;
          ?>
          </p>
          <?php require('./inc/menu.inc.php'); ?>
    		</header>
    		<div>
          <?php echo $table; ?>
    		</div>
    		<footer>
    			<div id="footer">
            <p><?php echo CUR_COPYRIGHT; ?></p>
          </div>
    		</footer>
    	</body>
    </html>
    <?php
    $scoop=NULL;
    ?>
    Je compte sur votre sagacité sans filtre pour me dire ce qui pourrait être vraiment amélioré !
    C'est déjà le fruit de quelques années d'expérience et de réflexion intense alors ne soyez pas trop sévère please...
    Je peux encaisser toutes les critiques, mais constructives et bienveillantes...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Pour le travail, je passe à Symfony avec les autres développeurs de la boîte.
    Cela m'attriste de ne pas passer à Laravel, car number one à l'international, mais l'exception française tire vers Symfony, à mon grand dam...
    Mais il paraît que quand on pratique un framework PHP, il est vraiment plus facile de passer à un autre ensuite...
    Ca me console.

    Dans tous les cas, j'ai cru comprendre que

    1) Informix n'est pas géré par Doctrine. Et une partie de l'existant dans notre entreprise est en Informix pour encore quelques années...
    Donc, il faudra que je développe un POPO (plain old PHP object) pour gérer toutes les requêtes sur ces bases !

    Pour une débutante en framework PHP, ça va être chaud.

    2) Dans mon entreprise, je ne gère pas l'authentification. C'est un portail RSA et je n'ai pas la main dessus. Me contente de récupérer ce que les headers apache portent. J'imagine que sur Symfony, ça va être spécial à traiter.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu dis ne pas utiliser de framework, sauf que quand je vois :
    - classes (partie parfaitement commune à tous les sites => reusable tel quel)
    pour moi c'est au moins une librairie , voir un framework en fonction de ce que ça contient.

    Maintenant avoir une base de code commune à tous les projets je suis pas fan. Tu changes une chose dans dans ta base commune et il faut controler tous les effets de bords dans tous les projets.

    Fait plutôt de ton dossier "classes" un module composer que tu peux ensuite installer facilement pour chaque projets éventuellement dans des versions différentes.
    De fait, tu hériterais de l'architecture "standard" d'une application php aujourd'hui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    |_ /src
       |_ tonapp
    |_ /vendor
       |_ lib1
       |_ lib2
       |_ etc
    |_ composer.json
    Après ce qui se passe dans /src c'est un peu au gout de chacun.
    Moi j'aime bien avoir :
    - un dossier /pub qui va contenir tout ce qui est envoyer au client donc par exemple les images , les fichiers js et très souvent l'index.php et qui est donc la racine web du projet (http://monsite arrive dans ce dossier)
    - un dossier /application qui contient tout le code métier et qui lui est en dehors de la racine web , rendant les fichiers php inaccessible par qui que ce soit. C'est le fichier index.php qui gère les inclusions.

    Mais ca reste très personnel et y'a pas vraiment de règle établie.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Merci de ta réponse, Grunk !
    Ca reste personnel, mais c'est bien la logique personnelle d'un développeur qui m'intéresse, car un développeur est composé de chair, d'os, et de logique !

    Je suppose que tu développes au quotidien avec un framework, vu ta réponse ? Tu peux me dire lequel ? Tu conserves ce framework même pour un petit projet perso à la maison ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    J'utilise Pry. C'est un framework que j'ai développé.
    Je l'utilise majoritairement au boulot , mais comme il a l'avantage d'être très léger et modulable je peux l'utiliser pour tout et n'importe quoi.
    C'est presque plus une grosse lib qu'un framework car quasiment rien n'est obligatoire et je peux très bien utiliser qu'un petit module et pas du tout le reste.

    Tu peux y jeter un oeil si tu veux mais c'est très peu et mal documenté et je fait pas spécialement de support dessus pour les quelques utilisateurs qui s'en servent
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    J'ai essayé Zend Framework 1.x il y a quelques années. J'ai un peu galéré mais j'avais réussi à développer une petite application avec.

    J'ai essayé Zend Framework 2.x plus récemment. Jamais réussi à adapter le tutoriel à mon cas simple d'accès à un serveur MySQL ; j'avais l'impression de remplir une série de fichiers de configuration... J'ai abandonné.

    J'avais essayé Symphony il y a quelques temps et de nouveau récemment : idem Zend Framework. J'ai abandonné.

    J'ai voulu récemment essayer Jelix mais devant un problème de configuration de LDAP et le peu d'aide reçue pour me dépanner, j'ai abandonné.

    J'ai eu récemment à faire des modifications sur une application développée avec Laravel. J'ai passé infiniment plus de temps à comprendre comment ce machin était foutu qu'à faire les modifications.


    Le point commun que j'ai constaté avec tous ces frameworks, c'est que je ne savais pas ce que je faisais. Au moindre message d'erreur du framework, grosse galère pour trouver ce qui déclenchait l'erreur et comment la résoudre. Autre chose que je n'aime pas dans les frameworks : l'utilisation d'un Outil Réellement Merdique pour accéder aux données. J'ai eu une très mauvaise expérience avec Hibernate il y a plusieurs années en utilisant le framework JBoss Seam et le pseudo SQL de Zend Framework ne m'avait pas convaincu non plus. Je préfère écrire mes requêtes en vrai SQL et les soumettre via PDO.


    J'ai donc décidé de développer from scratch en MVC. Il est probable que ça deviendra mon framework puisque je développe en parallèle une appli pro et une appli personnelle.

    Mon architecture :
    /monProjet (contient les fichiers .htaccess (pour l'url rewriting) et index.php (qui contient l'auto-loader, le renvoi spécial vers les fichiers ajax commençant par aj_, l'appel de la configuration de base puis l'appel du routeur).
    - Application
    -- Ajax (contient les fichiers php Ajax dont le nom commence par aj_)
    -- Config
    -- Controller (contient les contrôleurs et classes générales. C'est surtout cette partie qui pourrait devenir le coeur du framework)
    -- i18n (contient un répertoire par langue et chaque répertoire contient les fichiers de traduction. Pas encore mis en oeuvre complètement car pas de besoin immédiat au boulot)
    -- Model (contient toutes les classes d'accès aux données)
    -- Modules
    --- Accueil
    ---- Controller (contient les contrôleurs du module Accueil)
    ---- View (contient les vues du module Accueil)
    --- DeuxiemeModule (même structure que Accueil)
    --- TroisiemeModule (...)
    -- View (contient les vues générales de l'application page.phtml, erreur.phtml, utilisateur.phtml, menuUtilisateur.phtml...)
    -- logs (destiné à recevoir les fichiers de log mais pas encore implémenté)
    -- Public
    --- css (contient LES fichiers css, à raison d'un général et d'environ un par vue. Inutile de charger un gros css pour n'utiliser qu'une toute partie du style qui y figure)
    --- img (contient les fichiers d'images)
    --- jquery (contient la bibliothèque jquery)
    --- js (contient les fichiers javascript de l'application)


    C'est améliorable et il y aura sans doute aussi encore un répertoire pour les fichiers uploadés par l'utilisateur ; il pourrait y avoir un répertorie pour les vidéos...

    L'avantage est que je maîtrise totalement ce que je fais et je comprends comment fonctionne mon application.

    J'envisage de faire une série de billets de blog, voire un tutoriel, pour expliquer "mon framework" construit pas à pas. Ce n'est peut-être pas top aux yeux des puristes de la POO mais l'essentiel est que ça fonctionne, ce soit compréhensible et débogable assez facilement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par grunk
    J'utilise Pry. C'est un framework que j'ai développé.
    Ah ! Faudra que je regarde ça en détail.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/11/2013, 10h57
  2. Question générale quant à l'utilisation d'un Framework PHP
    Par J.Walsh dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 20/01/2012, 11h05
  3. [JDialog] Ajouter un scroll quand on n'utilise pas de Layout
    Par mavina dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 14/10/2008, 13h03
  4. Utilisation d'un framework PHP depuis des classes JAVA
    Par sharivaree dans le forum Langage
    Réponses: 3
    Dernier message: 12/10/2006, 16h10
  5. Réponses: 13
    Dernier message: 08/03/2004, 21h32

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