Jak zjistit, kolikátá metoda z pole callbacků se právě vykonává?
- Šaman
- Člen | 2666
STRUČNĚ:
Mám pole callback funkcí a potřebuji (zevnitř těchto fcí) zjistit, jestli
je poslední nebo ne. Jěště lépe, zjistit kolikátá z kolika tato
obslužná meteda je. (Tj. informaci, že právě probíhá druhá ze čtyř
obslužných metod navěšených na nějakou událost.)
To pole callbacků mám k dispozici.
PODROBNĚ:
Zkouším zpracovávat formuláře jako komponentu a rád bych jí naprogramoval
implicitní chování, jako třeba přesměrování na aktuální presenter. To
se však má vykonat jen pokud si v presenteru nenavěsím na tlačítko
vlastní callback funkci.
Teď to řeším následovně: KOD KOMPONENTY
<?php
public $onOkClick = null;
/** V konstruktoru navesime implicitni obsluhu tlacitek */
public function __construct($data = null)
{
parent::__construct();
//... (prace s datovym modelem, to ted neni dulezite);
$this->onOkClick[] = callback($this, 'okClick');
}
/** Zpracovani formulare po kliknuti na tlacitko "Ok" */
public function okClick(SubmitButton $button)
{
$values = $button->getForm()->getValues();
if(isset($this->data))
{
$this->data->setData($values);
}
elseif(count($this->onOkClick) == 1) /** !!! @todo: jak jinak zjistit jestli je tato obsluzna metoda posledni? */
{
throw new Exception("Nemohu ulozit data z formulare! Neni k dispozici model, ani obsluzna metoda v presenteru.");
}
/* pokud je prave vykonavana metoda jedinou obsluhou udalosti, tak implicitne presmerovat */
/** !!! @todo: jak jinak zjistit jestli je tato obsluzna metoda posledni? */
if(count($this->onOkClick) == 1)
$this->getPresenter()->redirect("this");
}
?>
KOD V PRESENTERU
<?php
protected function createComponentMyForm()
{
$form = new KalkulatorKrok1Form($this->data);
$form->onOkClick[] = callback($this, 'obsluznaMetoda');
return $form;
}
?>
Takže teď zjišťuji počet položek v poli callbacků, ale nezdá se mi to čisté. Nemáte někdo nápad jak zjistit kolikátá obsluha z kolika se právě vykonává, pls?
Editoval Šaman (11. 5. 2010 12:29)