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 | 667
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