Form validator vnorena metoda a Fatal Error Using $this…
- xbinx
- Člen | 3
Zdravim… Riesim pomerne obskurdnu zalezitost.
Mam nieco taketo:
<?php
class DatasetAddPresenter extends AdminAccessPresenter
{
protected function createComponentAddForm()
{
//var_dump($this);
function table_check($item)
{
return $this->AccessModel->getTableExistence($item->value);
}
$form = new Nette\Application\UI\Form;
$form->addText('menutitle','Názov datasetu');
$form->addText('dbtable','Tabulka')
->addRule('table_check','Tabulka neexistuje.');
.....
}
}
$this->AccessModel dedim z AdminAccessPresenteru, ktory ho dedi z BasePresenteru. Na urovni zakomentovaneho //var_dump($this); este k $this pristupovat viem, ale uz vo vnutri vnorenej metody nie.. Debugger pise Fatal Error Using $this when not in object context
Co s tym? Neviem si rady, totizto, mam formular, do ktoreho okrem ineho vkladam aj nazov tabulky, s ktorou sa pracuje, a pri poslani formu je potrebne overit, ci tato tabulka naozaj existuje ( aby nevznikol chybny zaznam atd.. ). O to overenie sa mi stara AccessModel->getTableExistence($name), ktory vracia true/false.
Neviem si predstavit, ako k tomu inak pristupovat. Cital som tu na fore o nejakych rieseniach, ale tie sa pouzivali pri onSubmit, ja to potrebujem pouzivat v uplne inej oblasti.
Viete mi pomoct? Ak nic take zatial neexistuje, tak aspon nejaky hint, ako to obist, urcite ste to uz niekto museli vyriesit.
Dakujem za odpoved
- xbinx
- Člen | 3
Hm, tak som dospel do stadia, kedy je to spinavo-funkcne
function table_check($item,$access)
{
return $access->getTableExistence($item->value);
}
$form = new Nette\Application\UI\Form;
$form->addText('menutitle','Názov datasetu');
$form->addText('dbtable','Tabulka')
->addRule('table_check','Tabulka neexistuje',$this->AccessModel);
Ale myslim si, ze by to takto fungovat nemalo. Co si o tomto rieseni myslite vy? Predavat cele $this nemozem, nemam potom pristup k $this->AccessModel
- duke
- Člen | 650
A co takhle?
class DatasetAddPresenter extends AdminAccessPresenter
{
public function tableCheck(Nette\Forms\IControl $item)
{
return $this->AccessModel->getTableExistence($item->value);
}
protected function createComponentAddForm()
{
$form = new Nette\Application\UI\Form;
$form->addText('menutitle', 'Názov datasetu');
$form->addText('dbtable', 'Tabulka')
->addRule(callback($this, 'tableCheck'), 'Tabulka neexistuje.');
.....
}
}