Implementace metody checkRequirements()

Ages
Člen | 129
+
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 | 1271
+
+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 | 129
+
0
-

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

m.brecher
Generous Backer | 905
+
-2
-

@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)

Ages
Člen | 129
+
0
-

@m.brecher Souhlasím, že z dokumentace není na první pohled jasné, co je best practice.
Nicméně na danou metodu se stále odkazuje zde: https://doc.nette.org/…thentication#…
Jako další zdroj inspirace lze použít i toto: https://github.com/…/tree/master