Vnitrni chyby: addError a makro form
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Filip Procházka
- Moderator | 4668
Pravděpodobně špatně používáš metodu addError
.
Nemáš zač.
Ale vážně :) Makro form vůbec nepoužívá DefaultRenderer
.
Řešením je buď napsat si vlastní makro, nebo je vypsat „ručně“.
<ul n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
Něco podobného jsem si tuhle bastil:
use Nette;
use Nette\Latte;
use Nette\Latte\MacroNode;
/**
* Macros for Nette\Forms.
*
* - {notif signInform}
* - {notif component}
*
* @author Filip Procházka
*/
class UIMacros extends Latte\Macros\MacroSet
{
/**
* @param Latte\Parser $parser
*/
public static function install(Latte\Parser $parser)
{
$me = new static($parser);
$me->addMacro('notif', callback($me, 'macroNotif'));
}
/**
* @param MacroNode $node
* @param Latte\PhpWriter $writer
*/
public function macroNotif(MacroNode $node, $writer)
{
$name = $node->tokenizer->fetchWord();
if ($name === FALSE) {
throw new ParseException("Missing control name in {notif}");
}
$name = $writer->formatWord($name);
// find control
$cmd = ($name[0] === '$' ? "if(is_object($name))\$_ctrl = $name;else" : '')
. '$_ctrl = $control->getWidget(' . $name . ');';
// if control, list flashes
$cmd .= 'if($_ctrl instanceof Nette\Application\UI\Control && $presenter && $presenter->hasFlashSession()){'
. '$_id = $_ctrl->getParamId("flash"); $_msgs = $presenter->getFlashSession()->$_id;}';
// if form list errors
$cmd .= 'if($_ctrl instanceof Nette\Forms\Form){'
. '$_msgs = $_ctrl->getErrors();}';
// iteration begin
$cmd .= 'foreach ($_msgs as $_msg): ?>';
// write message
$cmd .= "\n"
. '<div class="notif <?php echo %escape((is_object($_msg) && isset($_msg->type)) ? $_msg->type : "error"); ?>">'
. "\n\t" . '<?php echo %escape((is_object($_msg) && isset($_msg->message)) ? $_msg->message : $_msg); ?>'
. "\n\n</div>\n" . '<?php';
// iteration end
$cmd .= ' endforeach;';
return $writer->write($cmd);
}
}
Název „notif“ je dost blbý, ale určitě si to zvládneš přejmenovat :)
{notif $control} flash zprávičky
{notif jmenoFormulare} chyby formuláře
Editoval HosipLan (10. 8. 2011 8:42)
- 22
- Člen | 1478
protože makro {form} automaticky nevypisuje chyby, takže si buď udělej svoje makro nebo vypsat ručně. Myslím, že HosipLan ti už odpověděl, jak se dívám ..