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 | 1273
+
+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 | 912
+
-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. 2025 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