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