Conception Module avec PHP classe

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous!

Sous Drupal7, débutant, je voudrais concevoir un module qui interagirait avec un fichier php contenant une classe, cette classe contiendrait mes fonctions d'accès à la base de données.

Est ce possible? Si oui, comment?
Merci d'avance

Forum : 

Et bien tout simplement en incluant le fichier DatabaseAccess.class.php à ton module
(require "class/DataBaseAccess.class.php";)
Dans ce fichier tu y placeras toutes tes fonctions d'accès à la db.
Dans ton module tu crées un objet DatabaseAccess, et tu exécutes ces fonctions.
Et voila, tout simplement.

Personnellement, le but de cette manoeuvre fut de centraliser tout les accès db de tout les fichiers de mon modules ( le .module, les formulaires, les autres classes,..) pour une meilleure maintenance

Sous drupal 7 il y a une manière plus propre dorénavant.

Il faut déclarer le fichier contenant le ou les classes dans le .info, et Drupal chargera se fichier en cas de besoin:

files (Optional)

Drupal now supports a dynamic-loading code registry. To support it, all modules must now declare any code files containing class or interface declarations in the .info file, like so:

name = Example module
description = "Gives an example of a module."
...
files[] = example.test

When a module is enabled, Drupal will rescan all declared files and index all the classes and interfaces that it finds. Classes will be loaded automatically by PHP when they are first accessed.

Bonjour, je souhaite factoriser un certains nombre de traitement dans une classe. mon module : GestionVoitures. -GestionVoitures.info -GestionVoitures.class

-GestionVoitures.module

Dans le Fichier .info

files[] = GestionVoitures.module
files[] = GestionVoitures.class

Dans le Fichier .class

<?php
class GestionVoiture{
 private
$modele;
    function
__construct( )     { ....     }
    public function
Rouler($modele){ ...    }
}
?>

Dans le Fichier .module J'ai une erreur : Fatal error: Call to undefined function Insert()

function Simulateur() {
....
Rouler($modele);
....

}

j'ai essayer plusieurs solution:
Avec et sans déclaration :GestionVoiture = new GestionVoiture();->erreur: Parse error: syntax error, unexpected '='
et ces deux syntaxes ....
GestionVoiture->Rouler($modele);
GestionVoiture::Rouler($modele);

Auriez vous une idée?

Je te conseil de le faire avec xautoload (module drupal).

Exemple concret :
Créer ton module : supermodule/
Créer un dossier src/ dans ton module ce qui permettra de ranger bien proprement tes fichiers :)
Ensuite créer tes fichier maclass.class.inc ou maclasss.php
Dans ton fichier maclass.php il faut mettre namespace Drupal\supermodule;
Pour l'utiliser dans ton .module utilise un use Drupal\supermodule\nomdetaclass;
Tu n'aura pas besoin d'ajouter dans le info files[].