Form validator vnorena metoda a Fatal Error Using $this…

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

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
+
0
-

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
+
0
-

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.');
                        .....
                }
        }
xbinx
Člen | 3
+
0
-

duke napsal(a):

A co takhle?

Hej, toto vyzera ovela lepsie. Vdaka