Frage

Wenn ich doctrine orm:validate-schema ausführen, öffnet es eine Reihe von Warnungen über meine kartiert Spalten sind öffentlich und nicht Getter / Setter-Methoden, sie zu wickeln. Er sagt, dass sie „faul Laden brechen“. Ich kann verstehen, wie machen zugeordnet Sammlungen Öffentlichkeit problematisch sein könnten (ich diese privat machen und wickeln Sie sie), aber wie ist das ein Thema für die Felder auf dem Objekt? Die Felder werden in voller Höhe belastet, mein Wissen.

War es hilfreich?

Lösung

Ich werde einen Schuss auf das geben, obwohl ich bin sicher kein Doctrine2 Experte.

Aus meiner (begrenzten) Nutzung und Prüfung scheint es, Lehre können Sie geben ein ähnliches Objekt ohne für das Objekt die Daten geladen werden . An diesem Punkt öffentliche Eigenschaften werden ein träges Laden brechen.

Lehre ist ein träges Laden an der Stelle, wo die Daten beibehalten angefordert wird, nicht, wenn das Objekt, das persistente Daten enthält angefordert wird.

Update: Ich habe einen Blick auf die Ist-Proxy-Code und es scheint, mein ursprüngliches Verständnis war meistens richtig. Das Proxy-Objekt nicht geladen werden sich erst eine Methode des Objekts aufgerufen wird. So dass jeder Antrag auf eine öffentliche Eigenschaft würde die Daten nicht geladen werden.

Andere Tipps

Beachten Sie, dass Lehre 2.4 jetzt unterstützt Proxy Objekte für entites mit öffentlichen Eigenschaften .

Marco Pivetta 's Website erklärt , wie es funktioniert :

class Customer {
    public $name;
    public $surname;
}

class CustomerProxy extends Customer {
    public function __construct(Customer $customer) {
        unset($this->name, $this->surname);
        $this->customer = $customer;
    }
    public function __set($name, $value) {
        $this->customer->$name = $value;
    }

    public function __get($name) {
        return $this->customer->$name;
    }
    // __isset, __unset, __clone, __sleep, __wakeup (or serialize/unserialize)
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top