Formulář se odesílá na špatnou routu
- Šroubek
- Člen | 8
Ahoj,
snažím se vytvořit formulář jako komponentu:
// app\adminModule\presenters\EmailsPresenter.php
protected function createComponentAddresForm()
{
$form = new Form();
$form->addText('email', 'E-mail:');
$form->addSubmit('save', 'Uložit');
$form->onSuccess[] = callback($this, 'addressFormSubmitted');
return $form;
}
Problém je v tom že továrničku mam v modulu admin, přičemž moduly
routuju v subdoméně (admin.nadjizerou.l/emails/add)
Routu pro adminModule mam:
// bootstrap.php
new Route('//[www.]<module admin>.<domain nadjizerou.[a-z]{1,3}>/<presenter>/<action>','Summary:default');
Ovšem formulář se odesílá na adresu
admin.nadjizerou.l/admin.emails/add?do=addresForm-submit
což samozřejmě vyhodí chybu Cannot load presenter
‚Admin:Admin:Emails‘
Již v html formuláře je
action="/admin.emails/add?do=addresForm-submit"
– správně by
mělo být pouze /emails/add?do=addresForm-submit
Prosím o nakopnutí správným směrem co dělám špatně. Chybí mi něco v definici formuláře nebo mam špatně definovanou routu? (běžné zobrazení stránky na základě url funguje správně.) Nebo mam špatně něco úplně jiného? Díky za pomoc.
PS.: Dále se mi nepodařilo přesunout definici formuláře do samostatné třídy a továrničce vytvářet její instanci a přidat ji callback, ale tím se budu zabývat až vyřeším tento problém ;-)
- Šroubek
- Člen | 8
Tak jsem to vyřešil změnou routy:
new Route('//[www.]<module admin>.nadjizerou.l/<presenter>/<action>','Admin:Summary:default');
Ale nechápu proč mi to nefunguje když chci mít variabilní doménu
(vývojovou vs. produkční – nadjizerou.l vs. nadjizerou.cz), tzn pokud
místo .nadjizerou.l/
nechám
.<domain nadjizerou.[a-z]{1,3}>/
Má někdo nápad jak udělat routu s variabilní doménou při zachování
funkčnosti modulu v subdoméně?
Teď už toto vlákno nepatří ani tak do formulářů, ale spíše do routování, tak ho tam případně můžete přeseunout :-o
- mildabre
- Člen | 62
Šroubek napsal(a):
Tak jsem to vyřešil změnou routy:
new Route('//[www.]<module admin>.nadjizerou.l/<presenter>/<action>','Admin:Summary:default');
Ale nechápu proč mi to nefunguje když chci mít variabilní doménu (vývojovou vs. produkční – nadjizerou.l vs. nadjizerou.cz), tzn pokud místo
.nadjizerou.l/
nechám.<domain nadjizerou.[a-z]{1,3}>/
Má někdo nápad jak udělat routu s variabilní doménou při zachování funkčnosti modulu v subdoméně?Teď už toto vlákno nepatří ani tak do formulářů, ale spíše do routování, tak ho tam případně můžete přeseunout :-o
Jestli to správně chápu tak máš dva vzdálené servery – jeden pro ostrý provoz a jeden pro testovací a jde o to aby routa fungovala nad oběma.
Možná to je úplně blbě (nejsem žádný Nette guru), ale což takhle v bootstrapu jednoduše otestovat pomocí $_SERVER[‚SERVER_NAME‘] kde se aplikace vlastně nachází (doména s koncovkou .l nebo .cz) a pomocí if() rozvětvit na dvě větve se dvěma odlišnými routami.
- Šroubek
- Člen | 8
Díky za nakopnutí správným směrem – to mě nenapadlo vyžít SERVER_NAME – jak jednoduché a funguje to :-)
$domain = substr($_SERVER['SERVER_NAME'], strrpos($_SERVER['SERVER_NAME'], ".") + 1);
new Route('//[www.]<module admin>.nadjizerou.' . $domain . '/<presenter>/<action>','Admin:Summary:default');
jen je škoda to nefunguje přímo regulárním výrazem [a-z]{1,3} přímo v routě (stejně jako při běžném použití rout).
Editoval Šroubek (28. 12. 2012 20:26)