Registrace vlastního rendereru

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

Zdravím.

Vytvořil jsem si vlastní renderer pro formuláře. Současně s tím i třídu MyForm, která rozšiřuje třídu Form.
Nechce se mi u každého formuláře znova renderer registrovat. Je možné v MyForm nějak zaregistrovat ten vlastní renderer? Zkoušel jsem to takhle, ale bez výsledku, stále se používá výchozí.

class MyForm extends Form
{
	public function __construct($name=NULL)
	{
		parent::__construct($name);

		// vlastni vykresleni formulare
		$renderer = new MyRenderer();
		$this->setRenderer($renderer);
	}
}
Filip Procházka
Moderator | 4668
+
0
-

Tohle řešení musí fungovat (mělo by), zkus se poohlídnout jestli neděláš chybu někde jinde.

Lawondyss
Člen | 106
+
0
-

Taky mám pocit, že tohle musí fungovat… jenže nefunguje. Nenapadá mě, kde hledat chybu.

Nette používám bez MVP. Ve skriptu to mám řešeno následovně:

function formPodpora($id=NULL)
{
	// definice formulare
	$form = new MyForm;

	$form->addHidden('id', $id);

	$form->addGroup();
	$form->addDate('datum', 'Datum');
	$form->addText('stravenky', 'Počet stravenek', 15, 15);
	$form->addSelect('uhrada', 'Forma úhrady', array(
		'P' => 'převodem',
		'H' => 'hotově',
	))
			->skipFirst('-- vyberte --');
	$form->addText('doklad', 'Číslo dokladu', 15, 15);
	$form->addText('castka', 'Částka', 15, 15);

	$form->addGroup();
	$form->addSubmit('save', 'Uložit');

	$form->onSubmit[] = 'formPodporaSubmitted';

	// nastaveni vychozich hodnot
	if(!$form->isSubmitted() && isset($id))
	{
		$sql = "
			SELECT * FROM podpora
			WHERE id='$id' LIMIT 1
		";
		$form->setDefaults(Db::db_query_fetch_array($sql));
	}

	return $form;
}
.
.
.
echo formPodpora($_GET['id']);
kravčo
Člen | 721
+
0
-

SQL injection…

Lawondyss
Člen | 106
+
0
-

kravčo napsal(a):

SQL injection…

SQL injection ošetřuje třída Db.

Jan Tvrdík
Nette guru | 2595
+
0
-

Pochybuji. Technicky to není reálné. Leda, že bys radikálně omezil, jaké SQL dotazy podporuje. (Nebo se spoléhal na magické uvozovky.)

Lawondyss
Člen | 106
+
0
-

Jan Tvrdík napsal(a):

Pochybuji. Technicky to není reálné. Leda, že bys radikálně omezil, jaké SQL dotazy podporuje. (Nebo se spoléhal na magické uvozovky.)

No, stejně plánuju přechod na dibi.
Ale potřebuju spíš poradit s tím problémem rozšířením Nette třídy Form.

Jan Tvrdík
Nette guru | 2595
+
0
-

Nemáš možnost to odkrokovat? Zkus si dumpnout výsledek metody getRenderer().

westrem
Člen | 398
+
0
-

To riesenie by fakt malo fungovat, mozes sem postnut este ako vyzera ten tvoj renderer?

Lawondyss
Člen | 106
+
0
-

Tak už jsem to vyřešil.
Měl jsem chybně pojmenovanou proměnnou. Typické $form a $from.

Foowie
Člen | 269
+
0
-

Debug::$strictMode = true;

kravčo
Člen | 721
+
0
-

Ak máš záujem o demonštráciu, prečo tvoja trieda Db SQL injection nezabráni, postni ju sem, alebo mi ju pošli mailom.

bojovyletoun
Člen | 667
+
0
-

Přesně tak. Pokud totiž slepíš sql dotaz a parametr do jednoho stringu, pak není možné rozeznat, co je dotaz a co data. Sice nevím jak to dokázat, ale prostě to tak je. Prostě si myslím, že ta sql injection je něco dirty