Frage

Ich arbeite an einem PHP-CMS wie Projekt und ich versuche, herauszufinden, was der bequemste Weg ist mit der CRUD-Funktionalität in PHP umzugehen.

Das CMS ist so programmiert, vollständig in verfahrens PHP (keine OOP - Ich weiß, dass viele von Ihnen nicht einverstanden ...) und wurde entworfen, um alles so einfach und leicht wie möglich zu halten, sowie die Schaffung eines hochgradig wiederverwendbare Funktionen und Code-Schnipsel.

Das CMS ermöglicht es, mehrere Module installiert / aktiviert auf Bedürfnisse Basis werden. Diese Module beschreiben verschiedene Arten von Inhalten, so werde ich wahrscheinlich so etwas wie Seiten am Ende mit, Nachrichten, Blogs um nur einige zu nennen.

Für jede dieser Inhaltstypen werde ich die CRUD-Operationen zu schaffen habe und jetzt das ich versuche, den bequemsten Weg zu finden, zu erreichen.

Eine Anforderung wäre, dass die Form für jeden dieser Inhaltstypen in einer einzigen externen Datei enthalten ist (sowohl für Einsatz und bearbeiten), und wenn es eine Möglichkeit, Server-Seite der Eingabevalidierung zu integrieren, die ein Plus sein würden.

War es hilfreich?

Lösung

Mit dem CRUD-Operationen meinen Sie nur die (langweilig) Datenbankabfragen?

Sie könnten genauso gut Einrichtung Ihrer Datenbank, so dass bis auf ein paar gemeinsame Felder unter Inhaltstypen, werden alle Daten für einen bestimmten Inhaltstyp wird als serialisierte assoziatives Array in einem Textfeld gespeichert.

So können Sie nur 1 Satz von Abfragen benötigen einen bestimmten Inhaltstyp CRUD, da die Daten auf die CRUD-Funktionen übergeben ist einfach blind serialisiert.

Zum Beispiel, sagen wir erklären, dass der Inhalt Titel, erstellt / aktualisiert Datum, Tags und kurze Beschreibung sind gemeinsame Daten betrachtet. Von dort aus haben wir einen Blog und eine Seite Inhaltstyp.

Ich würde möglicherweise eine Datenbanktabelle als solche erstellen:

CREATE TABLE `content` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR  NOT NULL,
  `short_description` TEXT  NOT NULL,
  `tags` TEXT ,
  `data` TEXT ,
  `content_type` INT  NOT NULL,
  `created_at` DATETIME  NOT NULL,
  `updated_at` DATETIME  NOT NULL,
  PRIMARY KEY (`id`)
)

(Gehen Sie weiter und nehmen wir an, die Referenztabellen für content_type erstellen werden)

Und während der Blog, können Daten wie „Pingbacks“ erfordern und die Seite ist möglicherweise nichts anderes als der Körper benötigt, Sie speichern nur die Ausgabe von so etwas wie das folgende Beispiel für einen Blog:

$data = serialize(array(
    "body" => "Lorem ipsum",
    "pingbacks" => array()
));

Updates sind einfach, wenn Sie die Daten aus der Datenbank holen Sie die Daten für die Bearbeitung in eine Form, basierend auf dem Inhaltstyp ausgewählt unserialize. Es werden Arbeiten auf die gleiche Weise, nur greifen eine Vorlage auf dem Inhaltstyp basiert und es den unserialisierten Datenarray senden. Die Vorlage muss nie Sorgen zu machen, wie die Daten gespeichert sind, nur, dass es ein $ data [ ‚Pingbacks‘] wird.

Wie für Ihre Formulare, mein Vorschlag ist Ihr Anti OOP Bund zu brechen und eine Form Generation Bibliothek. Wenn Sie es aus dem Rahmen herausziehen kann, indem Zend_Form mit Zend_Config und Zend_Validate aus dem Zend Framework (alle Zend_Config beträgt in dieser Situation ist eine komfortable Schnittstelle und Traverse XML und INI-Dateien zu laden) macht das Leben wirklich schön. Sie können Ihre XML-Dateien definieren die Form für jeden Inhaltstyp haben, und alles, was Sie tun würde, machen Sie einfach das Formular auf Ihrer Seite (die XML-Grabbing von Inhaltstyp basiert off), die gefilterten Daten Grabben, Entfernen der „gemeinsamen Felder“ wie Name, erstellt / aktualisiert Daten, dann serialisiert, was in der Datenbank übrig. Keine Kenntnis des Schemas für einen bestimmten Inhaltstyp erforderlich ist (es sei denn, Sie werden streng möchten).

Obwohl als eine persönliche Seite würde ich sehr empfehlen Sie schauen in Zend_Form greifen (mit Zend_Validate und Zend_Config) sowie mit

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