Implementace metody checkRequirements()

Ages
Člen | 128
+
0
-

Zdravím,
Rád bych implementoval metodu checkRequirements(), která by ověřovala, Presentery, signály komponent a metody presenteru s anotací „restricted“.

Je níže uvedený způsob správný?

//BasePresenter.php
    public function checkRequirements($element): void
    {
        if ($element instanceof \ReflectionClass) {
            if ($this->presenter->getSignal() !== null) {
                bdump($this->presenter->getSignal(), 'Component signal');
				// ...
            } else {
                bdump($this->presenter->getName(), 'Presenter name');
				// ...
            }
        } elseif ($element instanceof \ReflectionMethod && $element->hasAnnotation('restricted')) {
            if ($this->getSignal()) {
                bdump($this->getSignal(), 'Presenter signal');
				// ...
            } else {
                bdump($this->getAction(), 'Presenter action');
				// ...
            }
        }
		// ...
    }

Děkuji

Editoval Ages (27. 2. 2020 12:16)

Felix
Nette Core | 1260
+
+1
-

Prijde mi, ze ano. Za me doporucuju separovat jednotlive checky do zvlastnich metod, jako checkUserRequirements, checkRoleRequirements atd. Dobre se to pak da skladat.

Ages
Člen | 128
+
0
-

@Felix díky, udělám to tak.

m.brecher
Generous Backer | 889
+
-1
-

@Ages

Díval jsem se dnes do dokumentace https://doc.nette.org/…n/presenters a nemohl jsem tam metodu checkRequirements() najít. Ve zdrojovém kódu nette/application ale podpora metody stále zůstává – otázkou je jak dlouho? Cca před pár měsíci jsem v dokumentaci popis metody ještě našel. Neplánuje se pozdější odstranění metody? Já ji používám jako „before presenter startup“, to ale jde udělat i bez této metody pomocí Presenter::onStarup[]. Mě tato metoda přišla zbytečně komplikovaná a fakt, že se volala dvakrát v různých fázích „beforeStartup“ a „beforeAction“ vedl na nečitelný kód. Jestli metoda v Nette končí tak je to bezpochyby dobře. Co v Nette postrádám je plnohodnotný event „beforeAction“ – pokud bych potřeboval provést forward neexistující metody na existující metodu tak stejně nemohu checkRequirements() použít, protože tato metoda se volá jenom když metoda akce existuje.

Editoval m.brecher (16. 2. 17:52)

OSZAR »