Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révisionLes deux révisions suivantes | ||
developpement_de_phpcompta [2013/03/23 15:52] – [Nouvelle méthode] dany | developpement_de_phpcompta [2014/03/22 16:58] – [Les mises à jour] dany | ||
---|---|---|---|
Ligne 158: | Ligne 158: | ||
=====La partie base de données===== | =====La partie base de données===== | ||
- | ====Ancienne méthode (non recommandée)==== | + | [[developpement: |
- | On avait commencé ainsi, on générait le fichier php à une table grâce à un script (dans phpcompta/ | + | ==== Les mises à jour ==== |
- | + | Depuis 2005, dans phpcompta, on a une table version qui contient le numéro du dernier patch appliqué. Quand le fichier do.php est exécuté, il vérifie si le nombre DBVERSION contenu dans constant.php correspond à la version actuelle | |
- | Les colonnes de la table sont dans un tableau et déclaré comme variable privée. Ce point est important. Cela oblige | + | |
- | + | ||
- | Cependant, je préfère souvent utiliser les commandes SQL plutôt que de passer par les objets. D' | + | |
<code php> | <code php> | ||
- | class Todo_List | + | /* Ficher do.php */ |
+ | if (DBVERSION < dossier:: | ||
{ | { | ||
+ | echo '< | ||
+ | | ||
+ | | ||
+ | } | ||
+ | if (DBVERSION > dossier:: | ||
+ | { | ||
+ | echo '< | ||
+ | $a = _(" | ||
+ | $base = dirname($_SERVER[' | ||
+ | echo '<a hreF="' | ||
+ | } | ||
- | private static $variable=array( | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | private $cn; | ||
- | private | ||
- | |||
- | function __construct ($p_init) { | ||
- | $this-> | ||
- | $this-> | ||
- | $this-> | ||
- | $this-> | ||
- | |||
- | } | ||
</ | </ | ||
+ | Dans le cas où DBVERSION n'est pas la valeur contenue dans la base de donnée, do.php vous propose d' | ||
+ | <code php> | ||
+ | /* fichier setup.php */ | ||
+ | // | ||
+ | // Upgrade the folders | ||
+ | // | ||
+ | for ($e=0;$e < $MaxDossier; | ||
+ | | ||
+ | echo "< | ||
+ | $name=$cn-> | ||
- | Ici voici, des setters / getters génériques, | + | if ( $cn-> |
+ | { | ||
+ | $db=new Database($db_row['dos_id'],'dos' | ||
+ | $db-> | ||
+ | Dossier:: | ||
- | + | } else | |
- | <code php> | + | { |
- | + | | |
- | public function get_parameter($p_string) | + | |
- | | + | |
- | $idx=self:: | + | |
- | return $this-> | + | |
- | } | + | |
- | else | + | |
- | exit (__FILE__.":".__LINE__.' | + | |
} | } | ||
- | public function set_parameter($p_string, | + | } |
- | if ( array_key_exists($p_string, | + | |
- | $idx=self:: | + | |
- | if ($this-> | + | |
- | } | + | |
- | else | + | |
- | exit (__FILE__.":" | + | |
- | + | ||
- | } | + | |
- | </ | + | |
- | Ceci est la fonction qui contrôle que les données sont valides. Cela pourrait aussi être fait dans la base de données, soit avec des contrôles d' | + | |
- | |||
- | <code php> | ||
- | |||
- | public function check($p_idx,& | ||
- | if ( strcmp ($p_idx, ' | ||
- | if ( strcmp ($p_idx, ' | ||
- | if ( strcmp ($p_idx, ' | ||
- | $p_value=substr($p_value, | ||
- | return true; | ||
- | } | ||
- | if ( strcmp ($p_idx, ' | ||
- | return true; | ||
- | } | ||
</ | </ | ||
- | Enfin la fonction save, qui permet soit d' | ||
+ | La fonction qui applique le patch est Database:: | ||
- | <code php> | ||
- | public function save() { | ||
- | if ( $this-> | ||
- | $this-> | ||
- | else | ||
- | $this-> | ||
- | } | ||
- | public function insert() { | + | Tous les patchs pour la base de données se trouve dans phpcompta/ |
- | if ( $this-> | + | Chaque patch commence par |
- | + | < | |
- | $sql=" | + | begin; |
- | " values (to_date($1, | + | |
- | $res=ExecSqlParam($this-> | + | |
- | $sql, | + | |
- | array($this-> | + | |
- | | + | |
- | | + | |
- | | + | |
- | ); | + | |
- | $this-> | + | |
- | + | ||
- | } | + | |
- | public function update() { | + | |
- | if ( $this-> | + | |
- | + | ||
- | $sql=" | + | |
- | " | + | |
- | $res=ExecSqlParam($this-> | + | |
- | $sql, | + | |
- | array($this->tl_title, | + | |
- | | + | |
- | | + | |
- | | + | |
- | ); | + | |
- | + | ||
- | } | + | |
</ | </ | ||
- | Comme cette partie est vraiment répétitive | + | et termine par |
- | + | < | |
- | + | update version set val=13; | |
- | < | + | |
- | static function test_me() { | + | |
- | $cn=DbConnect(dossier:: | + | |
- | $r=new Todo_List($cn); | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | print_r($r); | + | |
- | $r-> | + | |
- | $r-> | + | |
- | print_r($r); | + | |
- | $r-> | + | |
- | $r-> | + | |
- | } | + | |
- | public function get_info() { | + | |
- | return var_export(self:: | + | |
- | } | + | |
+ | commit; | ||
</ | </ | ||
- | + | Ainsi, si le script échoue, la mise à jour s' | |
- | + | ||
- | + | ||
- | Et finalement, les fonctions info et test_me | + | |
- | + | ||
- | + | ||
====Nouvelle méthode==== | ====Nouvelle méthode==== | ||
Ligne 379: | Ligne 299: | ||
</ | </ | ||
Si on change la structure d'une table, il ne faut presque rien changer : seulement quelques lignes. | Si on change la structure d'une table, il ne faut presque rien changer : seulement quelques lignes. | ||
+ | ===== Les tests unitaires ===== | ||
+ | Avant on utilisait dans chaque class , une fonction nommée [[developpemement:: | ||
+ | |||
+ | A partir de NOALYSS (version 6.7.2.0), et pour les plugins nous utiliserons PHPUnit.Ces tests sont heureusement appelables directement depuis NetBeans (version 7.4 et supérieure). | ||
+ | Il faut tout d' | ||
+ | |||