Jak vypnout escapování ve {control Form error} a zobrazit tak html obsah
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Lukáš Růžička
- Člen | 15
Zdravím,
jak vypnu escapování při vykreslení chybových hlášek formuláře
v šabloně?
V presenteru mám toto:
<?php
$form->addText('link', 'Odkaz na Marketplace')
->addRule(Form::FILLED, 'Zapomněli jste zadat odkaz na Marketplace')
->addRule('WpPresenter::checkDuplicateApp', "U <a href='".$this->link("editProfile")."'>vašeho vývojářského profilu</a> už aplikaci se stejným appid evidujeme a duplicitní položky není možné vkládat.")
->getControlPrototype()->setPlaceholder("http://www.windowsphone.com/s?appId=id-aplikace")->setClass("big");
?>
V šabloně jsem zkoušel toto:
{!control addForm errors}
Avšak neúspěšně. Html kód z chybové hlášky se vysype na obrazovku a nezpracuje se jako řádný odkaz.
Díky za reakce,
Lukáš Růžička
Editoval Lukáš Růžička (22. 5. 2012 14:34)
- ViPEr*CZ*
- Člen | 817
Chyby se dají vypsat např takhle:
{form myForm}
<!-- vykreslení chyb -->
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
{/form}
Jinak nevidím důvod to složitě vykreslovat. Ukázka je vlastní renderování. Ale pokud zavolám jen control, pak se chyby opět vypisují do ul-li tagu. S tím si pak už můžu dělat co chci. Samotné zachycení nevalidního odeslaného formu třeba do ajaxu pak můžu dělat takhle:
$this->onError[] = callback($this, 'FormError');
...
public function FormError() {
$json = new stdClass();
$json->result = "error";
$json->message = $this->getErrors();
$response = new Nette\Application\Responses\JsonResponse($json);
$this->getPresenter()->sendResponse($response);
}
- Lukáš Růžička
- Člen | 15
Díky,
můj problém vyřešilo. Nicméně věřil jsem, že bude existovat
i elegantnější cesta, než zkrátka chybové hlášky vypisovat takto
ručně :)
LR