Předávání argumentu (pole z db) do komponenty v multiplieru

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

Ahoj,

mám formulářovou komponentu v multiplieru

	protected function createComponentFormKategorie() {
    try {
        $seznam_kategorii = $this->produktyManager->seznamKategoriiNazvy();

        $multi = new Multiplier(function($idKat, $seznam_kategorii) {
            return $this->formKategorieFactory->create($idKat, $seznam_kategorii);
        });
    } catch(\Nette\Application\AbortException $el) {
        throw $el;
    } catch (Exception $e) {
        $this->flashMessage($e->getMessage(), "chyba");
    }

    return $multi;
}

a potřebuji jí předat obsah, který se tahá z db, pro html select. Dotaz nechci dát dovnitř komponenty, abych při každé iteraci multiplieru neměl zbytečný dotaz na db, když jde pořád o ta samá data. Dá se to do té komponenty předat nějak z vnějšku, abych dotaz pokládal jen jednou? To, co mám v kódu, nepoužije proměnou $seznam_kategorii – IDE mi píše „out of the scope“. To chápu, ale je nějaký způsob, jak to udělat?

Díky za pomoc

Editoval Thommie (9. 1. 2018 19:29)

Felix
Nette Core | 1247
+
+4
-

Mas spatne zapis.

$multi = new Multiplier(function($idKat) use ($seznam_kategorii) {
            return $this->formKategorieFactory->create($idKat, $seznam_kategorii);
        });

Viz PHP dokumentace: http://php.net/…nonymous.php#…

David Matějka
Moderator | 6445
+
+4
-

mimochodem, cele chytani vyjimek je spatne

  1. je v prvni rade zbytecne, jedine misto, kde muze dojit k vyjimce, je „seznamLategoriiNazvy“, chyba, ke ktere by doslo ke komponente, zde nebude odchycena
  2. (temer) vzdy bys mel chytat konkretni vyjimky, u kterych vis, ze mohou nastat – nikoliv tedy obecnou Exception
  3. uzivateli bys nikdy nemel zobrazovat zpravu z vyjimky, muze obsahovat citlive udaje
  4. a hlavne – takovymhle chytanim vyjimky ji zabranis pred jakymkoliv logovanim. takze kdyz uz neco chytas, tak tu vyjimku i zaloguj pres Tracy\Debugger::log