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:
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:
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... :mrgreen:
Je peux encaisser toutes les critiques, mais constructives et bienveillantes...