Autor Zpráva
petr24
Profil *
Dobrý den,

Mám dva druhy controllerů jeden je default (App\Controller), což jsou hlavní, které vykreslují stránku a poté mám komponenty (App\Components).
V šabloně je umísťuji jako {com XY::action}

Routovat a volat jiné akce App\Controller není problém, jelikož toto obstarává router, ale co když chci donutit XY komponentu, aby místo akce "action" zavolala třeba "doFoo"?

Napadlo mě to udělat přes query string, něco jako web.cz/dashboard/index/?com=XY::doFoo a poté si šablonovací systém, dříve než zavolá XY::action (jak je to napsáno v šabloně), ověří zda v URL není ?com= a pokud ano, zavolá něco jiného, resp. jinou metodu.

Ale i tak mi to přijde strašně krkolomné.

Neexistuje na toto lepší přístup?

Děkuji za rady.
Joker
Profil
petr24:
zda v URL není ?com=
To přece má v $_GET["com"]

Jinak nějakým způsobem se přece musí dovědět, jakou metodu čeho má zavolat.
A podobné téma -jestli jsem to dobře pochopil- se řešilo v Moduly v MVC
petr24
Profil *
Ano, to byl také můj dotaz. Tady již mám komponenty hotové a zaintegrované do systému. Jen nyní potřebuji vytvořit nějaký "komunikační kanál", který bude upravovat pouze určitou komponentu. Například mám komponentu s login boxem, po zadání údajů chci aby se překreslila pouze ona komponenta (bez AJAX). Tudíž musí zůstat zachovaná aktuální URL, ale nějak musím upozornit komponentu, aby se nějak zachovala. Snad to vysvětluji aspoň trošku srozumitelně.

Aktuálně to mám přes ?com=komponenta::akce, což se přidá do aktuální URL, ale moc se mi to popravdě nelíbí, není lepší způsob?
Joker
Profil
petr24:
Ano, to byl také můj dotaz.
Aha. Bylo by lepší používat pořád stejnou přezdívku.

petr24:
Například mám komponentu s login boxem, po zadání údajů chci aby se překreslila pouze ona komponenta (bez AJAX).
No, jednak překreslit jen část stránky jinak než komunikací se serverem přes JS (typicky AJAX) nejde a hlavně mi připadá, že přihlášení uživatele do systému většinou ovlivní daleko víc věcí, než jen přihlašovací formulář.
petr24
Profil *
Ano, přihlašovací komponentu jsem asi pro příklad vzal špatně. Ale dobře, dejme tomu že mám na stránce box s nějakým obsahem, například tweety z twitteru a chci je pomocí AJAXu obnovovat každých X minut. Na jakou URL mám volat AJAX požadavek? Protože router routuje pouze na controllery, které jsou ve složce app/controllers/, přičemž tyto komponenty mám v app/components/. To mám napsat do routeru podmínku, že pokud v URL detekuje nějaký příznak, má routovat na komponentu a ne na controller? Nelze toto řešit jinak? Jde mi jen opravdu o to, jak "poslat impulz k překreslení" (jakou cestou) dané komponentě, jak se tohle řeší?
Joker
Profil
petr24:
Na jakou URL mám volat AJAX požadavek?
Podle mojí představy z minulého (výše odkázaného) vlákna by se volal jednoduše příslušný controller.

To mám napsat do routeru podmínku, že pokud v URL detekuje nějaký příznak, má routovat na komponentu a ne na controller?
Podle mě je zdroj problému v tom, že ty „komponenty“ jsou nejspíš taky controllery -nebo by alespoň měly být-, akorát se jim jinak říká. Čili v tom systému pak jsou dvě skupiny controllerů a s každou by se mělo zacházet jinak.
Proč to jednoduše neudělat tak, že komponenta bude mít controller mezi těmi ostatními a hotovo?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: