Jak zjistit, kolikátá metoda z pole callbacků se právě vykonává?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Šaman
Člen | 2635
+
0
-

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)

jansfabik
Člen | 193
+
0
-

zkus použít tohle:

if (end($this->onOkClick) == callback($this, 'okClick')) {
    // tahle metoda je poslední
}

nebo pokud chceš zjistit, kolikátá metoda se vykonává:

$pos = array_search(callback($this, 'okClick'), $this->onOkClick);

Editoval jansfabik (12. 5. 2010 17:34)

Šaman
Člen | 2635
+
0
-

Díky moc, čekal jsem nějakou callback magii, že mě ani nenapadlo řešit to takhle. Funguje to luxusně.

Editoval Šaman (17. 5. 2010 14:30)