Question

Existe-t-il un moyen simple d'écrire une fonction commune pour chacune des opérations CRUD (créer, récupérer, mettre à jour, supprimer) dans PHP SANS utiliser de framework. Par exemple, je souhaite avoir une fonction de création unique qui prend le nom de la table et les noms de champs en tant que paramètres et insère des données dans une base de données mySQL . Une autre condition est que la fonction puisse prendre en charge les jointures, c'est-à-dire il devrait pouvoir insérer des données dans plusieurs tables si nécessaire.

Je sais que ces tâches pourraient être effectuées à l'aide d'un cadre, mais pour diverses raisons - trop longues à expliquer ici - je ne peux pas les utiliser.

Était-ce utile?

La solution

J'ai écrit cette chose, c'est une sorte d'échafaud poli. Il s'agit essentiellement d'une classe dont le constructeur prend la table à utiliser, un tableau contenant les noms et types de champs et une action. Sur la base de cette action, l'objet appelle une méthode sur lui-même. Par exemple:

Voici le tableau que je passe:

$data = array(array('name' => 'id', 'type' => 'hidden')
          , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));

Ensuite, j'appelle le constructeur:

new MyScaffold($table, 'edit', $data, 

J'ai écrit cette chose, c'est une sorte d'échafaud poli. Il s'agit essentiellement d'une classe dont le constructeur prend la table à utiliser, un tableau contenant les noms et types de champs et une action. Sur la base de cette action, l'objet appelle une méthode sur lui-même. Par exemple:

Voici le tableau que je passe:

$data = array(array('name' => 'id', 'type' => 'hidden')
          , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));

Ensuite, j'appelle le constructeur:

<*>

Dans le cas ci-dessus, le constructeur appelle la méthode 'edit' qui présente un formulaire affichant les données de la table $, mais uniquement les champs que j'ai définis dans mon tableau. L'enregistrement utilisé est déterminé par la méthode $ _GET. Dans cet exemple, le champ "étudiant" est présenté comme une zone de texte (d'où le type "texte"). Le «titre» est simplement l'étiquette utilisée. Étant "masqué", le champ ID n'est pas affiché pour l'édition mais reste à la disposition du programme.

Si j'avais passé 'delete' au lieu de 'edit', cela supprimerait l'enregistrement de la variable GET. Si je ne transmettais qu'un nom de table, il s'agirait par défaut d'une liste d'enregistrements avec des boutons pour les éditions, les suppressions et les nouveaux.

C’est juste une classe qui contient tous les CRUD avec de nombreuses possibilités de personnalisation. Vous pouvez le rendre aussi compliqué ou aussi simple que vous le souhaitez. En en faisant une classe générique, je peux l'insérer dans n'importe quel projet et simplement passer des instructions, des informations de table et des informations de configuration. Pour une table, je ne voudrais peut-être pas autoriser l'ajout de nouveaux enregistrements via l'échafaud, dans ce cas, je pourrais définir le paramètre "newbutton". être faux dans mon tableau de paramètres.

Ce n'est pas un cadre au sens conventionnel. Juste une classe autonome qui gère tout en interne. Cela présente quelques inconvénients. Les clés doivent être que toutes mes tables doivent avoir une clé primaire appelée "id", vous pouvez vous en passer, mais cela compliquerait les choses. Une autre possibilité consiste à préparer un grand tableau contenant des informations détaillées sur chaque table à gérer, mais vous ne devez le faire qu’une seule fois.

Pour un tutoriel sur cette idée, voir ici

GET['id']);

Dans le cas ci-dessus, le constructeur appelle la méthode 'edit' qui présente un formulaire affichant les données de la table $, mais uniquement les champs que j'ai définis dans mon tableau. L'enregistrement utilisé est déterminé par la méthode $ _GET. Dans cet exemple, le champ "étudiant" est présenté comme une zone de texte (d'où le type "texte"). Le «titre» est simplement l'étiquette utilisée. Étant "masqué", le champ ID n'est pas affiché pour l'édition mais reste à la disposition du programme.

Si j'avais passé 'delete' au lieu de 'edit', cela supprimerait l'enregistrement de la variable GET. Si je ne transmettais qu'un nom de table, il s'agirait par défaut d'une liste d'enregistrements avec des boutons pour les éditions, les suppressions et les nouveaux.

C’est juste une classe qui contient tous les CRUD avec de nombreuses possibilités de personnalisation. Vous pouvez le rendre aussi compliqué ou aussi simple que vous le souhaitez. En en faisant une classe générique, je peux l'insérer dans n'importe quel projet et simplement passer des instructions, des informations de table et des informations de configuration. Pour une table, je ne voudrais peut-être pas autoriser l'ajout de nouveaux enregistrements via l'échafaud, dans ce cas, je pourrais définir le paramètre "newbutton". être faux dans mon tableau de paramètres.

Ce n'est pas un cadre au sens conventionnel. Juste une classe autonome qui gère tout en interne. Cela présente quelques inconvénients. Les clés doivent être que toutes mes tables doivent avoir une clé primaire appelée "id", vous pouvez vous en passer, mais cela compliquerait les choses. Une autre possibilité consiste à préparer un grand tableau contenant des informations détaillées sur chaque table à gérer, mais vous ne devez le faire qu’une seule fois.

Pour un tutoriel sur cette idée, voir ici

Autres conseils

Si vous essayez d'écrire une telle fonction, vous découvrirez bientôt que vous venez de réaliser un autre framework.

Bien sûr que non, c’est la raison pour laquelle ces cadres existent et implémentent des installations simples. J'essayais d'abord de convaincre qui de droit d'utiliser réellement un cadre existant et ensuite, si je ne respectais pas ce qui précède, je jetais un coup d'œil à un ou deux d'entre eux et copiais les idées d'implémentation. Si vous échouez, consultez http://www.phpobjectgenerator.com/

.

Sans aucun framework n'inclut sans ORM? Sinon, je suggérerais de consulter Doctrine ou Propulser .

Je sais ce que vous ressentez.

Pork.DbObject est une classe simple à partir de laquelle vous pouvez étendre vos objets. Il faut juste une classe de connexion à la base de données pour fonctionner.

s'il vous plaît vérifier: www.schizofreend.nl/pork.dbobject/

(oh yeah, yuk @ générateur d'objet php. alerte de ballonnement! qui veut avoir ces fonctions personnalisées dans chaque classe ???)

Je pense que vous devriez écrire vos propres fonctions qui permettent d'atteindre CRUD sauf si vous êtes stressé par le temps. cela peut être un framework en soi, mais vous devez savoir ce qu’il fait avant de crier framework ... il devient également pratique de connaître ces choses car vous pouvez facilement récupérer des bugs sur le framework et les corriger vous-même .... ....

Je suis tombé sur cette question il y a quelque temps déjà et je n'ai finalement rien trouvé qui puisse le faire de manière légère.

J'ai fini par écrire le mien et je me suis récemment mis à la tâche de l'ouvrir (licence MIT) au cas où d'autres le trouveraient utile. C'est sur Github, n'hésitez pas à le consulter et à l'utiliser s'il répond à vos besoins!

https://github.com/ArthurD/php-crud-model-class

Espérons que cela trouvera une utilité - nous aimerions voir des améliorations / contributions, aussi, alors n'hésitez pas à soumettre des demandes de tirage! : -)

c'est possible mais je ne le recommanderais pas.

S'il n'y a absolument AUCUN moyen d'utiliser un framework, vous pouvez créer une classe de base que tous les autres objets du modèle étendent. Vous pouvez ensuite faire en sorte que la classe de base génère & amp; exécuter SQL basé sur get_class () et get_class_vars () .

Est-ce possible? Oui.
Est-ce que je le recommanderais? non

scroll top