Implementace metody checkRequirements()

- Ages
- Člen | 129
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)

- m.brecher
- Generous Backer | 912
@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
@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