Problém formuláře s více komponentami na stránce

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

Prosím o radu jak zjistit, kde je problém. Mám v presenteru vytvořeny 2 komponenty

<?php
	protected function createComponentDenikDispeceraNaplanovano($name)
	{
		$report = new ReportViewer();

		return $report;
	}

	protected function createComponentDenikDispeceraSparovano($name)
	{
		$report = new ReportViewer();

		return $report;
	}
?>

Komponenta ReportViewer má v sobě tvárničku na formulář s filtrem s tímto kodem

<?php
	protected function createComponentReportFilter($name)
	{
		$form = new AppForm($this, $name);
		foreach ($this->columns as $column){
			$form->addText($column->getColumnNumber(), $column->getColumnName(), 30, 30);
		}

		$form->addSubmit('filter', 'Filtruj');

		$form->onSubmit[] = array($this, 'okClickedFiltruj');

		return $form;
	}

?>

Pokud zobrazím na stránce pouze jednu komponentu (buď {control denikDispeceraNaplanovano} nebo {control denikDispeceraSparovano}, tak vše funguje jak má. Pokud všem zobrazím na jedné stránce obě komponenty, pak při odeslání formu komponenty se nevrátí žádná data. Zkusil jsem v metodě kClickedFiltruj hned na začátku vypsat přes $this->presenter->request->getPost() co je v POSTu a zjistil jsem, že pokud je zobrazena jen jedna komponenta tak jsou v POSTu všechna furmulářová pole správně, ale pokud jsou zobrazeny obě komponenty, tak je tam jen tlačítko filter.

Používám Nette 0.9.6 .

frosty22
Člen | 373
+
0
-

Jen tak zkusím odhadnout, zdali náhodou se nevytváří oba formuláře se stejnými názvy, resp. zdali nemají stejný signál – <form action=„../?do=tohle-by-melo-byt-unikatni“> což by mohlo být způsobeno tím ,že se oba formuláře jmenují „reportFilter“, ikdyž teoreticky by v názvu měl být i název komponenty nadtím, čili: „denikDispeceraSparovano-reportFilter“ a „denikDispeceraNaplanovano-reportFilter“ což je ok, ale pokud tomu tak není, tak zkus předat vlastní název třeba:

$form = new AppForm($this, $name.__CLASS__);

Ale jenom taková zkouška, co mě napadla

bojovyletoun
Člen | 667
+
0
-

název formu by na to nenměl mít vliv. Můj příklad:
Formuláře mají správný action ?do=ab-sub-submit správné ID id="frm-ab-sub, akorát id prvků není rozlišeno frmsub-se. Zajímalo by mě proč to nejdem zkus poslat zdroják.

Zde je muj
šablona

{block content}
<a n:href="this">home</a>
{control a}
{ifset $control[ab]}{control ab}{/ifset}
<hr>
{snippet dumps}
{!$u}
{=rand()}
{/snippet}

code php

<?php



class TPPresenter extends \Nette\Application\UI\Presenter
{



	protected function startup()
	{
		parent::startup();
		new Cp($this, 'a'); //first comp;
		$this['ab'] = new Cp; //second;
	}


}



class Cp extends \Nette\Application\UI\Control
{



	function createComponentSub($n)
	{
		$f = new \Nette\Application\UI\Form;
		$f->elementPrototype->class('ajax');
		$w = &$f->renderer->wrappers;
		$w['pair']['container'] = null; //just styling
		$f->addSelect('select', "sel")->setItems(array("a" => "Aa", "b" => "bá"));
		$f->addSubmit('su1');
		$p = $this->getPresenter();
		$f->onSuccess[] = function(\Nette\Application\UI\Form $f) use ($p) {
				$p->invalidateControl();
				ob_start();
				dump($p->request->post);
				dump($p->request->params);
				$p->template->u = ob_get_clean();
			};
		return $f;
	}



	function render()
	{
		echo $this['sub'];
	}

}