BaseComponent – renderování Error template – jak na to?
- thm
- Člen | 147
Ahoj, potřeboval bych poradit jak udělat následující tak, aby to bylo
správně. Jedná se spíše problém s OOP.
Mám takovou sadu specifických komponent a potřeboval bych vždy, když se
bude komponenta vykreslovat, aby si nejdříve zkontrolovala
konzistenci/úplnost svých vstupních dat a poté se buď vykreslila, nebo
v případě chyb vypsala proč se nevyrenderovala korekntě.
No nebudu tady popisovat moje myšlenkové pochody (které určitě nejsou správně zajeté), ale vyhodím sem rovnou to, co mi z hlavy vylezlo.
Toto je předek:
namespace App\Model\RecordComponents;
abstract class RecordComponent extends \Nette\Application\UI\Control{
/** @return array of errors*/
abstract function getErrors();
public function render(){
if($this->getErrors()) $this->renderErrors();
}
public function renderErrors(){
$this->template->setFile(__DIR__.'/errors.latte');
$this->template->errors = $this->getErrors();
$this->template->render();
}
}
V potomkovi volám
public function render(){
parent::render(); //Toto bych pak měl uvádět v každém potomkovi, aby došlo na kontrolu
$this->template->setFile(__DIR__.'/header.latte');
$this->template->authority = $this->authority;
$this->template->organization = $this->organization;
$this->template->render();
}
Jenže komponenta vyrenderuje v případě chyb i header.latte :) Ale to nechci. V případě presenteru bych to udělal setView(), tady nevím. A navíc si myslím, že to vůbec asi není celé dobře. Jak byste toto řešili vy?
Editoval thm (12. 10. 2015 10:35)
- David Matějka
- Moderator | 6445
treba:
abstract class RecordComponent extends \Nette\Application\UI\Control
{
public function render()
{
if($this->getErrors()) {
$this->renderErrors();
} else {
$this->doRender();
}
}
abstract protected function doRender();
}
a v potomkovi tu metodu pojmenuj doRender