Jak řešit chybějící parametr konstruktoru subkomponenty
- darkweaver
- Člen | 18
Zdravím,
měl bych tu dotaz ohledně komponent. Nejprve se pokusím přiblížit, oč se to vlastně snažím než přejdu ke kódu.
Dělám jednoduchý přehled sportovišť a jejich rezervací. Komponent tu mám více, ale zajímalo by mě, jak řešíte takovouto situaci:
Presenter
Komponenta pro přehled sportovišť
A poslední komponenta, ve které se pak zobrazují rezervace apod.
V podstatě jde o to, že když se snažim zpracovat nějaký signál z komponenty SportsFieldRow, ajaxem nebo bez, tak se zavolá onen if blok:
Property $this->sportsFields je null, protože se plní až v render metodě, kde se opět kontroluje, zda-li je null.
A tady se nachází onen problém, když nenaleznu sportoviště s daným ID, tak do vytvářené komponenty místo objektu SportsField předávám NULL.
Jde nějak v tomto místě, nebo nějak jinak zastavit vytváření komponenty SportsFieldRow?
Chtěl bych v tomto případě prostě zobrazit text, že prováděnou akci nejde dokončit z důvodu chybějícího sportoviště.
Snad jsem popsal dobře, oč mi jde :-))
Mnohokrát děkuji za odpovědi a přeji krásný den.
- David Matějka
- Moderator | 6445
ja vetsinou vyhazuju klasicky badrequest exception, takze to ukaze 404
- darkweaver
- Člen | 18
Tady se jedná o intranetovou aplikaci a zadávání rezervace se děje v modálním okně a celé je to ajaxové. Přes to modální okno se uživatel prokliká až k samotné rezervaci, protože se tam vybírá, zda-li chce vytvořit rezervaci na novou účtenku, nebo již existujíci otevřenou apod.
Proto bych spíš potřeboval, aby, když dojde k této situaci na jakékoliv úrovni, tak abych mohl nějak ukončit celou tu kaskádu vytváření komponent a zobrazit prostou hlášku, která se objeví v tom modálním okně.
Je dost možné, že na to jdu špatně a mělo by se to řešit trochu jinak, ale vůbec mě nenapadá jak :(
- darkweaver
- Člen | 18
@Antik Ahoj, tady přikládám odkaz na gist
V podstatě je tam komponenta pro přehled sportovišť, která obsahuje komponentu pro vykreslení každého sportoviště. V každém řádku je seznam hodin jako odkaz a po kliknutí na odkaz se spustí modální okno a ajaxem se natáhne komponenta, přes kterou se poté uživatel prokliká až k rezervaci.
V kódu, co jsem poslal už je to vyřešený, ale asi ne moc pěkně.
Zkoušel jsem vyhazovat vlastní vyjímku a chytat ji v presenteru, ale pokaždé to na té vyjímce umřelo, nedostalo se to ke catch bloku v presenteru.
Nakonec jsem to vyřešil tak, že můžu do konstruktoru komponenty vložit jak objekt SportsField, tak NULL a potom s tím dál v kódu pracuju, aby se zobrazila konkrétní hláška a zároveň se i updatovala tabulka sportovišť na pozadí. Řešení asi nic moc, ale funguje :-))
// edit link na gist, zapoměl jsem tam dát šablonu a jednu komponentu
Editoval darkweaver (29. 8. 2016 15:35)