Zacyklení vykreslování komponenty

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

Ahoj všem. Mám problém, který se tu už několikrát řešil, nenašel jsem však konkrétní řešení pro mě. Aplikace mi končí chybou Fatal Error Maximum function nesting level of ‚100‘ reached, aborting! Děje se to při vykreslování formuláře ze šablony pomocí {pageForm}

<?php

namespace AdminModule;

use Nette,
        Nette\Debug,
        Nette\Forms,
        Nette\Environment,
        Nette\Application\AppForm,
	Nette\Web\Html,
        Nette\Forms\Form,
        Nette\Forms\TextArea ,
        Nette\Forms\Controls;

class TinyMCEControl extends TextArea /*implements Nette\Forms\IFormControl*/
{
     public static function addTinyMCEControl(Form $form, $name, $label = NULL, $cols = 40, $rows = 10)
     {
	return $form[$name] = new self($form, $label, $cols, $rows);
     }
}

Nette\Forms\FormContainer::extensionMethod('addTinyMCE', array('AdminModule\TinyMCEControl', 'addTinyMCEControl'));

...
...
...

	function createComponentPageForm()
	{
		$form = new AppForm;

		...
		$TMCEditor = $form->addTinyMCE('content','',50,60);
                /*
		**Zde** $TMCEditor = $form->addTextArea('content','',50,60); **FUNGUJE**
		*/
		...
?>

Z kódu jsem už odstranil veškerou funkčnost komponenty, podle mne by se teď měla chovat stejně jako TextArea. Když místo addTinyMCE napíšu addTextArea, funguje to. Přitom podobně tvořená komponenta ve FrontModule mi funguje bez problémů.

Obrázek: CallStack

Předem díky za náměty na opravu.

Editoval Martin (16. 3. 2011 17:59)

Martin
Člen | 171
+
0
-

Tak si rovnou odpovím sám, třeba to někomu ušetří půl dne práce. Až po pečlivém procházení zdrojových kódů Nette a zjišťování, proč vlastně se to cyklí, jsem zjistil, že mám ve volání konstruktoru parametr navíc. Místo return $form[$name] = new self($form, $label, $cols, $rows); má být return $form[$name] = new self($label, $cols, $rows);

Editoval Martin (16. 3. 2011 21:24)