Nesoulad snippet a form maker

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
+1
-

Pokud zkombinuji při vypisování formuláře makry se snippetem takto

{form uploadForm}
	{snippet category}
		{label category /} {input category}
		<!-- lze takto obejít: -->
		{=$_control["uploadForm"]["category"]->label} {=$_control["uploadForm"]["category"]->control}
	{/snippet}
{/form}

nastane chyba: Undefined variable: _form

Laděnka:

<?php if ($_label = $_form["category"]->getLabel()) echo $_label->addAttributes(array()) ?>

Dojde tedy k jakési deaktivaci načtení komponenty do $_form. Nette 2.0.2, ale už se mi to stávalo i dříve.

Filip Procházka
Moderator | 4668
+
+1
-

Nedojde k žádné deaktivaci. Snippety využívají k fungování bloky. A bloky fungují tak, že vyzobou svůj obsah do funkcí a jejich volání vloží místo sebe.

Když se tedy volá snippet, formulářové makro se logicky nezavolá a nenastaví nezbytné proměnné. Daleko lepší řešení tedy je:

public function handlePartialFormSubmit()
{
	if ($this->isAjax()) {
		$this->template->form = $this->template->_form = $this['uploadForm'];
	}
}
Tomáš Votruba
Moderator | 1114
+
0
-

Díky, fachá.