Chyba při vlastním renderingu formuláře
- Mesiah
- Člen | 240
Dobrý den,
prosím Vás, vytvářím formulář, ten se při volání
{widget loginForm}
normálně vykreslí, ale pokud použiju
vlastní rendering, dostávám chybu
InvalidArgumentException – Component with name
‚loginForm‘ does not exist.
form:
<?php
public function createComponentLoginForm()
{
$form = new AppForm();
$this->template->form = $form;
$renderer = $form->getRenderer();
$renderer->wrappers['form']['container'] = NULL;
$renderer->wrappers['form']['errors'] = FALSE;
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['pair']['container'] = NULL;
$renderer->wrappers['control']['container'] = NULL;
$renderer->wrappers['label']['container'] = NULL;
$form->addText('login')->setValue('Login')->addRule(Form::FILLED, 'Login musí být vyplněn!');
$form->addPassword('password')->addRule(Form::FILLED, 'Heslo je povinné!');
$form->addSubmit('enter');
$form->onSubmit[] = callback($this, 'onLoginForm');
return $form;
}
?>
a template:
<ul class="vmenu">
{if ($lang=='cs')}
<li class="kategorie"><span class="txt">Uživatel</span></li>
{else}
<li class="kategorie"><span class="txt">User</span></li>
{/if}
{* widget loginForm *}
{? $presenter['loginForm']->render('begin') }
{if !empty($presenter['loginForm']->errors)}
<div class="errors">
{foreach $presenter['loginForm']->errors as $error}
{$error} <br />
{/foreach}
</div>
{/if}
<li class="major">
{$presenter['loginForm']['login']->control}
</li>
<li class="major">
{$presenter['loginForm']['password']->control}
</li>
<li class="major">
{$presenter['loginForm']['enter']->control}
</li>
{? $presenter['loginForm']->render('end') }
</ul>
problém je na řádku
{? $presenter['loginForm']->render('begin') }
. Nevíte v čem
by mohl být problém..?
- westrem
- Člen | 398
No problem je ocividne v tom, ze Formular nie je zaradeny medzi komponenty presenteru.
Na 90% tvrdim, ze „pruser“ bude na tomto
riadku kde z nejakeho dovodu neprejde podmienka a neprida sa komponenta.
Rozdiel je totiz v tom, ze ak volas widget component
tak sa vola
getComponent($name)
ale ak to mas ako pristup cez pole vola sa ako
getComponent($name, TRUE)
kde to true naznacuje, ze je
$need
teda potrebna – preto hodi exception s tym textom co si
napisal.
Bohuzial ani po polhodine brblania sa v API nie som schopny prist na to kde
konkretne to zlyhava, skus postnut vygenerovany kod sablony, mozno je problem
v tom, ze sa formular naatachuje k niecomu nespravnemu (ad: quick tip, skus
vymazat, podla mna nepotrebny, riadok
$this->template->form = $form;
)
- zarubik
- Člen | 31
Jenom jsem to prolítnul, ale nechybí ti za:
$renderer->wrappers['label']['container'] = NULL;
Nastavení změny zpět do rendru?
$form->setRenderer($renderer);
Edit: aha :).. koukám, že jsi to vyřešil.. to vykresluješ ručně, tak to tam celej render v tovarnicce mít ani nemusíš.
Editoval zarubik (14. 9. 2010 17:13)
- westrem
- Člen | 398
zarubik napsal(a):
Jenom jsem to prolítnul, ale nechybí ti za:
$renderer->wrappers['label']['container'] = NULL;
Nastavení změny zpět do rendru?
$form->setRenderer($renderer);
Edit: aha :).. koukám, že jsi to vyřešil.. to vykresluješ ručně, tak to tam celej render v tovarnicce mít ani nemusíš.
No je pravda, ze to ako to vykresluje ide urobit cisto pomocou wrapperov a ak sa nemylim tak nasledovne:
$renderer->wrappers['form']['errors'] = TRUE; // resp. zmaz to nastavenie na false
$renderer->wrappers['error'] = array(
'container' => 'div class=errors',
'item' => NULL,
);
$renderer->wrappers['pair'] = array(
'container' => 'li class=major',
'.required' => 'required',
'.optional' => NULL,
'.odd' => NULL,
);
$renderer->wrappers['form']['container'] = NULL;
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['control']['container'] = NULL;
$renderer->wrappers['label']['container'] = NULL;
A to nastavenie spat do formu mu nechyba, pretoze predtym vola
$form->getRenderer
, ktory vracia objekt (referenciu nan), takze
vykonane zmeny sa prejavia aj na nom ..
Editoval westrem (14. 9. 2010 18:07)