Archiv für den Monat: Februar 2014

Agavi project not found nach Umbenennung des pub-Verzeichnisses

Agavi erwartet eine bestimmte Verzeichnisstruktur, damit all diese magischen Wizards um Module und Aktionen usw. anzulegen funktionieren. Wenn man beispielsweise das pub-Verzeichnis umbenennt, scheitert Agavis project-locate. Wusste ich bis heute nicht. Zu meiner Verteidigung, ich war nicht derjenige, der pub umbenannt hat. Zum Glück reicht ein einfacher Symlink (ln -s dasVerzeichnisInDasJemandPubUmbenanntHat pub) um das Problem zu lösen. Vielleicht hilft das ja jemandem weiter.

In WordPress mittels wpdb Objekte in die Datenbank schreiben

Die wpdb-Klasse in WordPress kam mir schon immer ein bisschen seltsam vor, da ich an PDO gewöhnt war und lange danach gesucht habe, wie ich denn nun meine Objekte in die Datenbank schreibe. Die einzige Lösung, die ich bisher gefunden habe, ist per Reflection, vielleicht hat ja jemand eine bessere Idee? Ich freue mich über Kommentare! Hier der Code:

 

    /**
     *  
     *
     * @param string $table Die Tabelle, in die per INSERT geschrieben werden soll
     * @param object $object Das Objekt
     * @return int|false
     */
   function insertObject($table, $object) {
        if(!is_object($object)) return false;

        $reflection = new ReflectionObject($object);
        // getProperties() als Parameter ReflectionProperty::IS_PUBLIC
        // übergeben, falls nur public-member des Objekts
        // in die Datenbank geschrieben werden sollen
        $properties = $reflection->getProperties();
        $dataArray = array();
        foreach($properties as $property) {
            // Die folgende Zeile löschen, falls nur public-member des Objekts in die Datenbank geschrieben werden sollen
            // Für beides gibt es meiner Meinung nach sinnvolle Use Cases, ggf. einen entsprechenden Parameter hinzufügen
            $property->setAccessible(true);
            $dataArray[$property->getName()] = $property->getValue($object);
        }

        global $wpdb;
        return $wpdb->insert($table, $dataArray);
    }

Üblicherweise verzichte ich in meinem Code auf den $table-Parameter um es noch zu vereinfachen und verwende entweder den Klassennamen als Tabellennamen oder habe eine statische Konstante const TABLE = ‚tabellenname‘; in der jeweiligen Klasse.