Archiv der Kategorie: PHP

PHP

PHP: Objekte rekursiv mit JsonSerializable als JSON ausgeben

Die Funktion json_encode() liefert bei Objekten nur den öffentlichen Teil der Eigenschaften zurück (das dann auch rekursiv). Wenn Eigenschaften in einem protected- oder private-Bereich stehen, dann werden diese Daten nicht zurückgeliefert.

Möchte man nun ein Objekt, dass aus verschiedenen Unterobjekten besteht ausgeben als JSON, dann versagt hier gewollt json_encode().

Umgehen kann man das Problem mit JsonSerializable. Das gewünschte Objekt muss JsonSerializable implementieren und eine öffentliche Methode jsonSerialize() haben.

In dieser Methode wird über ein return der Teil der Daten zurückgegeben, die json_encode verarbeiten soll:

class Demo implements JsonSerializable 
{
    public $id; // würde exportiert werden
    protected $record; // würde nicht exportiert werden
    private $mode; // würde ebenfalls nicht exportiert werden
    private $unwanted;

    public function jsonSerialize()
    {
        return [
            'id' => $this->id,
            'record' => $this->record,
            'mode' => $this->mode
        ];
    }

Statt einer einfachen Zuweisung der Eigenschaften auf der rechten Seite kann natürlich auch eine Methode des Objekt aufgerufen werden, die dann die gewünschten Daten zurückliefert (zB $this->getRecord()).

Wird jetzt das Objekt Demo mit json_encode() ausgegeben, dann würden im oberen Beispiel die Eigenschaften „id“, „record“ und „mode“ ausgegeben.

PHP: ChromeLogger zum Debuggen PHP-Script direkt zu Chrome

https://raw.githubusercontent.com/ccampbell/chromephp/master/ChromePhp.php
https://craig.is/writing/chrome-logger

1. ChromeLogger installieren (Extension für Chrome)
2. ChromePhp herunterladen und in Projekt einbinden
3. Chrome console öffnen (Weitere Tools > Entwicklertools > Console)
4. ChromeLogger aktivieren (kleines Konsolensymbol neben der URL-Zeile anklicken, damit es blau wird)

include 'ChromePhp.php';
ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');

Beim Ausführen des Scriptes erscheinen die Ausgabe in der Chrome Console.

Javascript: DataTables ColReorder Zustand speichern und laden

Beim ColReorder-Plugin für DataTables kann der Zustand gespeichert und geladen werden.
Normalerweise speichert DataTables die Einstellungen im localstorage. Möchte man jedoch die Werte zentral verwalten, dann bietet es sich an, einen Ajax-Call zum Speichern und Laden abzusetzen.

Das folgende Beispiel besteht aus der HTML-Datei und zwei PHP-Scripten zum Speichern und Laden.
reorder.html
state_save.php
state_load.php

Die Reihenfolge der Spalten steht im JSON-Objekt unter dem Key „ColReorder“ und ist ein Array (Zahlen).

Weiterlesen