Frage

Gibt es eine einfache Möglichkeit, eine gemeinsame Funktion für jede der CRUD (create, retreive, update, delete) Operationen in PHP ohne Verwendung eines Rahmens zu schreiben. Zum Beispiel möchte ich schaffen Funktion eine einzige haben, den die Tabellennamen und Feldnamen als Parameter und fügen Daten in eine mySQL database nimmt. Eine weitere Voraussetzung ist, dass die Funktion der Lage sein sollte unterstützen verbindet D.h. es sollte in der Lage sein, Daten in mehrere Tabellen einfügen, falls erforderlich.

Ich weiß, dass diese Aufgaben mithilfe eines Rahmens durchgeführt werden könnte, aber aus verschiedenen Gründen - zu lange hier zu erklären - ich kann sie nicht verwenden

.
War es hilfreich?

Lösung

Ich schrieb diese sehr Sache, es ist eine Art eines polierten Gerüstes. Es ist im Grunde eine Klasse des Konstruktor von dem die Tabelle verwendet zu werden braucht, ein Array mit Feldnamen und Typen, und eine Aktion. Auf der Grundlage dieser Aktion ruft die Aufgabe, ein Verfahren auf sich. Zum Beispiel:

Dies ist das Array I übergeben:

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

Dann den Konstruktor Ich nenne:

new MyScaffold($table, 'edit', $data, $_GET['id']);

Im obigen Fall ruft der Konstruktor den ‚Bearbeiten‘ Methode, die ein Formular aus dem $ Tabelle Anzeigen von Daten präsentiert, sondern nur Felder setze ich in meinem Array auf. Der Datensatz verwendet es wird durch die $ _GET-Methode bestimmt. In diesem Beispiel wird das ‚Student‘ Feld als Textfeld angezeigt (daher der ‚Text‘ Typ). Der ‚Titel‘ ist einfach das Etikett verwendet. ‚Versteckt‘ wird das ID-Feld wird nicht für die Bearbeitung gezeigt, ist aber für das Programm zur Verfügung.

Wenn ich gegangen war ‚löschen‘ anstelle von ‚bearbeiten‘ es den Datensatz aus der GET-Variable löschen würde. Wenn ich nur einen Tabellennamen übergeben würde es auf eine Liste von Datensätzen mit Schaltflächen für Standard bearbeiten, löschen und neu.

Es ist nur eine Klasse, die alle CRUD mit vielen Anpassbarkeit enthält. Sie können es machen so kompliziert oder so einfach, wie Sie es wünschen. Durch sie eine generische Klasse machen kann ich es fallen für jedes Projekt in und nur Anweisungen übergeben, Tabelleninformationen und Konfigurationsinformationen. Ich könnte für eine Tabelle nicht will von neuen Datensatz zu ermöglichen, durch das Gerüst, könnte ich auf „Schaltfläche Neu“ in diesem Fall hinzugefügt wird in meinen Parametern Array falsch.

Es ist kein Rahmen im herkömmlichen Sinne. Nur eine eigenständige Klasse, die alles intern behandelt. Es gibt einige Nachteile auf diese. Die wichtigsten diejenigen, muss sein, dass alle meine Tabellen müssen einen Primärschlüssel ‚id‘ genannt haben, könnten Sie ohne diese weg, aber es würde die Sache noch komplizierter. Ein weiteres ist, dass eine große Palette Detaillierung Informationen zu jeder Tabelle verwaltet werden muß darauf vorbereitet sein, aber Sie müssen dies nur einmal tun.

Für ein Tutorial auf dieser Idee finden Sie unter hier

Andere Tipps

Wenn Sie versuchen, eine solche Funktion zu schreiben, werden Sie schnell feststellen, dass Sie nur noch einen Rahmen realisiert haben.

Natürlich nicht, das ist, warum diese Frameworks existieren und crud Einrichtungen umzusetzen. Ich würde zuerst versuchen, davon zu überzeugen, wer auch immer es braucht eigentlich einen vorhandenen Rahmen zu verwenden, und zweitens, um die oben versagt, würde ich einen Blick auf ein oder zwei von ihnen zu nehmen und die Umsetzung Ideen zu kopieren. Andernfalls alles, was man einen Blick auf http://www.phpobjectgenerator.com/ nehmen könnte

Ohne Rahmen umfasst ohne ORMs? Ansonsten würde ich vorschlagen, einen Blick auf Lehre haben oder Propel .

Ich weiß, wie Sie sich fühlen.

Pork.DbObject ist eine einfache Klasse, die Sie Ihre Objekte aus erstrecken können. Es braucht nur eine DB-Verbindung Klasse zu arbeiten.

lesen Sie bitte: www.schizofreend.nl/pork.dbobject/

(oh yeah, igitt @ php Objekt-Generator. aufblasen Alarm! wer will die benutzerdefinierten Funktionen in jeder Klasse haben ???)

Ich glaube, Sie sollten Ihre eigenen Funktionen schreiben, die CRUD erreichen, wenn Sie sich die Zeit gestresst sind. es könnte ein Rahmen auf seine eigene, aber Sie müssen lernen, was der Rahmen macht vor Rahmen schreit .... es wird auch praktisch, um diese Dinge zu wissen, weil Sie auf dem Rahmen leicht Pickup Bugs und sie, um sich selbst zu beheben .... ....

Ich kam auf SO über diese Frage eine Weile zurück, und ich landete nicht zu dieser Zeit etwas zu finden, der dies tat in einer leichten Art und Weise.

Ich landete mein eigenes bis zu schreiben, und ich habe vor kurzem um es Sourcing zu öffnen (MIT-Lizenz) für den Fall, andere finden es nützlich. Es liegt auf Github, fühlen Sie sich frei, es auszuprobieren und es verwenden, wenn es Ihren Bedürfnissen entspricht!

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

Hoffentlich wird es einige Verwendung finden - würde gerne einige Verbesserungen / Beiträge zu sehen, auch so fühlen sich frei Pull-Anfragen einreichen! : -)

es ist möglich, aber ich würde es nicht empfehlen.

Wenn es absolut keine Möglichkeit, einen Rahmen verwenden Sie eine Basisklasse erstellen könnte, dass alle anderen Modellobjekte erweitern. Anschließend können Sie die Basisklasse machen generieren und SQL ausführen basierend auf get_class() und get_class_vars().

Ist es möglich? Ja.
Würde ich es empfehlen? Nö

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top