Registrace vlastního rendereru

- Lawondyss
 - Člen | 106
 
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
 
Tohle řešení musí fungovat (mělo by), zkus se poohlídnout jestli neděláš chybu někde jinde.

- Lawondyss
 - Člen | 106
 
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']);
				
- Jan Tvrdík
 - Nette guru | 2595
 
Pochybuji. Technicky to není reálné. Leda, že bys radikálně omezil, jaké SQL dotazy podporuje. (Nebo se spoléhal na magické uvozovky.)

- Jan Tvrdík
 - Nette guru | 2595
 
Nemáš možnost to odkrokovat? Zkus si dumpnout výsledek metody
getRenderer().

- bojovyletoun
 - Člen | 668
 
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