Eigenschaften annotieren

Du kannst auf verschiedene Arten festlegen, welche Eigenschaften "managed" sein sollen.

  1. AnnoDispProperties
  2. nicht deklarierte Eigenschaften

AnnoDispProperties

Standardmässig werden alle Eigenschaften, die public oder protected sind, als "managed" erkannt. Mit der Annotation n2n\dispatch\annotation\AnnoDispProperties kannst du dies verhindern und die Eigenschaften, die "managed" sein sollen, selbst bestimmen. Dafür müssen diese Eigenschaften nicht zwingend in der Klasse des Form Models deklariert sein. Entsprechende Getter- und Setter-Methoden sind ausreichend. Dies ist beispielsweise nützlich, wenn diese Eigenschaften nicht im Form Model, sondern in einem anderen Objekt (z. B. eine Entity) deklariert sind.

class ExampleForm implements Dispatchable {
    private static function _annos(AnnoInit $ai) {
        $ai->c(new AnnoDispProperties('foos', 'bar'));
    }
    
    private $foos;
    private $someObject;
    protected $baz;

    public function __construct(SomeObject $someObject) {
        $this->someObject = $someObject;
    }
    
    public function setFoos(array $foos) {
        $this->foos = $foos;
    }
    
    public function getFoos() {
        return $this->foos;
    }
    
    public function setBar($bar) {
        $this->someObject->setBar($bar);
    }
    
    public function getBar() {
        return $this->someObject->getBar();
    }
    
    private function _validation(BindingDefinition $bd) {
    }
}

In diesem Beispiel sind die Eigenschaften $foos und "bar" "managed". Die Eigenschaft $baz ist hingegend nicht "managed", obwohl sie protected ist.

nicht deklarierte Eigenschaften

Müssen Eigenschaften, die nicht in der Klasse des Form Models deklariert sind, über Annotationen konfiguriert werden, kann statt der deklarierten Eigenschaft die zugehörige Setter- oder Getter-Methode annotiert werden.

class ExampleForm implements Dispatchable {
    private static function _annos(AnnoInit $ai) {
        $ai->m('setFoo', new AnnoDispDateTime(DateTimeFormat::STYLE_SHORT));
    }
    
    private $someObject;

    public function __construct(SomeObject $someObject) {
        $this->someObject = $someObject;
    }
    
    public function setFoo(\DateTime $foo) {
        $this->someObject->setFoo($foo);
    }
    
    public function getFoo() {
        return $this->someObject->getFoo();
    }
        
    private function _validation(BindingDefinition $bd) {
    }
}
« Eigene Validatoren Dynamische Formulare »

Kommentare

Du musst eingeloggt sein, damit du Beiträge erstellen kannst.

Fragen