Formulář generuje chybné Action

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

Zdravím,
používám nejnovější nette 2.0.7 (Ale chyba je i v Nette 2.0.6).

Generuji formulář jako komponentu „createComponentSearchForm“ a problém je v tom, že ve výsledném HTML je u Action: <form ..... action=„http://do?=searchForm-submit“ … ></form>

jedná se o Nette\Application\UI\Form;

<?php
public function createComponentSearchForm()
{
	$form = new Form
	$form->addText('bla');
	......
	$form->onSuccess[] = callback($this, 'makeSearch');
	return $form;
}
?>

V šablone jej vykresluji ručně.

Což je jasně špatně, ale připadá mi, že se to týká celé aplikace kde se vygeneruje u ostatních formů action jen „http://“.

Píšu tady jelikož mám obrovskou aplikaci a hledat problém mi trvá už pár hodin.
Chci se zeptat jestli se s tím už někdo nesetkal.

Šaman
Člen | 2666
+
0
-

a dědíš formulář od Nette\Application\UI\Form (dříve AppForm)? Nebo dědíš od Nette\Forms\Form, což jsou základní formuláře nenavázané na Nette presenter?

//edit: Aha, sorry, píšeš, že se jedná o Nette\Application\UI\Form. Jsi si jistý, že nedošlo někde k dědění od prostého formu? Jiný problém mě nenapadá, u mě to funguje (vývojová verze).

Editoval Šaman (18. 12. 2012 23:01)

Filip Procházka
Moderator | 4668
+
0
-

Továrničky na komponenty jsou vždy protected! Ukaž jak to renderuješ a ukaž víc toho presenteru. Mám podezření, že voláš $presenter->createComponent...; místo aby jsi komponentu nechal řádně připojit.

jetpack
Člen | 71
+
0
-

Jo já zapoměl na protected. To jsem opravil.
Renderuju to tak, že v šabloně mám:

{form searchForm}
{input bla}

{/form}

Ale připadá mi to, že to je chyba u routování.
Mám totiž aplikaci založenou na subdoménách a na to mám speciální routy.

<?php
router[] = new Route("//<subdomain>.$domain/[<param1>][/<param2>]", array(
	'module' => 'Front',
	'presenter' => 'Universal',
	'action' => 'default',
	'domain' => $domain,
        'subdomain' => NULL
));
?>

v $domain je ‚mojedomena.tld‘ a tahle routa mi dělá nejspíše problémy.
Když mám přímo natvrdo:

<?php
router[] = new Route("//subdomena.$domain/[<param1>][/<param2>]".......
?>

tak to problémy nedělá a ten stejný form má action „/“
Ten form vykresluji v BasePresenteru a od něj dědím v UniversalPresenteru.
V UniversalPresenteru nemám nic víc než jenom actionDefault, nějaké if, elseif apod. dle subdomény.

jetpack
Člen | 71
+
0
-

Aha tak tu routu jsem opravil na:

<?php
router[] = new Route("subdomena.$domain/[<param1>][/<param2>]".......
?>
  • Odstranil jsem ty 2 lomítka na začátku a už to háže pěkně action=„/“.
jetpack
Člen | 71
+
0
-

Je tohle Bug nebo jsem to špatně pochopil ty routy?
Já myslel, že pokud se jedná o subdoménu v routě tak na začátek se dávají ty 2 lomítka „//“ nebo se pletu?

jetpack
Člen | 71
+
0
-

No tak jsem zjistil, že když tam nedám ty 2 lomítka // před tu routu tak mi to nezachití Router a nedostanu se k tomu přes

<?php
$this->params['subdomain'];
?>

Takže je někde chyba?
Na jednu stránku mi form negeneruje chybné action, ale router mi nezachytí parametr.

Junkman
Člen | 3
+
0
-

nazdar,
pobehal som cele forum ale nikde sa mi nepodarilo najst riesenie.
mam standardny Nette 2.0.7

problem je v tom ze mam viacjazycny web v ktorom mam formular. Ked ho odoslem tak ma presmeruje na vychozi stranku
odosielam formular z sajta.com/en/form
spracuje sa ale presmeruje ma na sajta.com/sk/form

$container->router[]  = new Route('<lang (sk|en|de|hu)>/<action>',array(
'presenter' => 'Homepage',
'action' => 'home',
'lang' => 'sk'
));

routy boli vzdy pre mna zahada a nechapem preco sa generuje url s sk.
html mi to vygeneruje action s paramterom sk aj ked som na …/en/form

<form action="sajta.com/sk/form?do=myForm-submit" method="post" id="frm-myForm"...>
jetpack
Člen | 71
+
0
-

Zkus si do nějakého BasePresenteru nebo nějakého rodiče toho presenteru dát :

<?php
/**
* @persistent
*/
public $lang;

A v té routě dej 'sk' => NULL

?>
Junkman
Člen | 3
+
0
-

diki moc!

jetpack
Člen | 71
+
0
-

Jinak koukni se na persistentní proměnné. Já měl s tím taktéž problémy.