Problém s new $variableClass

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

Zdravim,

v BasePresenteru mam tovarnicku

protected function createComponentForm()
{
	$explode = explode(':', $this->presenter->name);
	$presenter = end($explode);

	$className = $presenter . 'Form';

	//return new CategoriesForm($this->context->db);

	return new $className($this->context->db);
}

V jeho detech pak pouze vytvarim formularove komponenty. Problem je, ze kod

	return new $className($this->context->db);

skonci
Fatal Error
Class ‚CategoriesForm‘ not found
i kdyz $className == ‚CategoriesForm‘

Predpokladam, ze pujde o nejakou chybu/vlastnost PHP. (pouzivam 5.3).
Vite jak takovy problem resit?

Ot@s
Backer | 476
+
0
-

ondrs napsal(a):
Fatal Error
Class ‚CategoriesForm‘ not found
i kdyz $className == ‚CategoriesForm‘

Máš třídu CategoriesForm v souboru, který je někde inkludovaný (nejlépe via robotLoader)? Sedí ti namespace? Toto není chyba PHP, ale nepozornosti.

ondrs
Člen | 8
+
0
-

Samozrejme
return new CategoriesForm($this->context->db);
se vykona bez problemu

Editoval ondrs (9. 8. 2012 13:37)

Ascaria
Člen | 187
+
0
-

Tipoval bych že neproběhne autoloading, zkus vytvořit takhle dvě stejné třídy:

$x = new CategoriesForm($this->context->db); // tady to teda nefailne pac rikas ze ti to jde a zaroven to prinuti tridu "se loadnout"
return new $className($this->context->db); // hodi to chybu ted?

Editoval Ascaria (9. 8. 2012 13:54)

ondrs
Člen | 8
+
0
-

Takže problém vyřešen

	protected function createComponentForm()
	{
		$explode = explode(':', $this->presenter->name);
		$presenter = end($explode);

		$className = '\AdminModule\\' . $presenter . 'Form';

		return new $className($this->context->db);
	}

Proč ale musím takto uvádět i kompletní namespace?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

To je otázka na PHP, nikoliv Nette fórum, ne? Nejde nicméně o chybu, ale vlastnost jazyka.

Elijen
Člen | 171
+
0
-

Rekl bych, ze to bude tim, ze se aktualni namespace automaticky doplnuje uz pri kompilaci. Pri kompilaci ovsem obsah promene $className neni znam.

Ascaria
Člen | 187
+
0
-

Aneb jak stejné věci nejsou až tak stejné, zajímavý postřeh.