Nefunkční flash message v layoutu

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

Dobrý den, mám v layout.latte

<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>

problém je, že se flash zprávy nezobrazují. ale když dám kod do default.latte tak to funguje. ale rád bych to měl v layoutu abych to nemusel psát do každé šablony. díky

Jan Endel
Člen | 1016
+
0
-

A vykresluješ ho nebo jenom tu šablonu?

bluray
Člen | 178
+
0
-

no layout se mi vykresluje vždy. a ta šablona taky

Tomáš Votruba
Moderator | 1114
+
0
-

@bluray Hoď sem minimální kód @layout.latte a default.latte, na kterém lze chybu reprodukovat.

Editoval Tomáš Votruba (11. 7. 2014 16:09)

bluray
Člen | 178
+
0
-

layout:

{**
 * @param string   $basePath web base path
 * @param array    $flashes  flash messages
*}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">

        <title>{ifset #title}{include title|striptags} | TODO nazev{/ifset}</title>

        <link rel="stylesheet" media="screen,projection,tv" href="{$basePath}/css/admin.css">
        <link rel="shortcut icon" href="{$basePath}/favicon.ico">
        {block head}{/block}
    </head>

    <body>
        <script> document.documentElement.className += ' js'</script>

        {include header.latte}
        <div id="container">
                <!--Flash hlášení-->
                <div n:foreach="$flashes as $flash" class="msg msg-{$flash->type}">
                    <p><strong>{$flash->message}!</strong></p>
                </div>
                <br />

                <!--Content-->
                    <div id="content">
                                {include content}
                            </div>
            </div>
        {include footer.latte}
        {block scripts}
        <script src="{$basePath}/js/jquery.js"></script>
        <script src="{$basePath}/js/netteForms.js"></script>
        <script src="{$basePath}/js/main.js"></script>
        {/block}
    </body>
</html>

default.latte:

<h2>Kategorie</h2>
{form addCategoryForm}
    <div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div> --tady to funguje
     <div class="msg msg-error" n:if="$form->ownErrors">
        <p n:foreach="$form->ownErrors as $error">{$error}</p>
    </div>
    <table class="table1">
        <tr>
            <td>{label nazev /}</td>
            <td>{input nazev class => 'field'}</td>
        </tr>
        <tr>
            <td></td>
            <td>{input send class=>'button'}</td>
        </tr>
    </table>
{/form}

presenter:

protected function createComponentAddCategoryForm(){
    $form = new UI\Form();
    $form->addText("nazev", "Název")->setRequired("Nezadal jsi název kategorie");
    $form->addSubmit("send", "Vytvořit");
    $form->onSuccess[] = $this->addCategoryFormSucceeded;
    return $form;
}

public function addCategoryFormSucceeded($form, $values){
    try{
        if($this->category->save($values->nazev))
        {
            $this->flashMessage("Kategorie byla úspěšně vytvořena");
            $this->redirect("this");
        }
    } catch (\Exception $ex) {
        $form->addError($ex->getMessage());
    }
}

Mám ještě jeden problém. když uložení proběhne bez problému, pořád se mi zobrazuje v šabloně tenhle div, ale bez textu:

 <div class="msg msg-error" n:if="$form->ownErrors">
    <p n:foreach="$form->ownErrors as $error">{$error}</p>
</div>

Díky

Editoval bluray (10. 7. 2014 23:20)

Šaman
Člen | 2666
+
0
-
  1. ty flashe jsou divné, chybu nevidím. Možná nasdílej ukázku celého projektu, ať to můžeme reprodukovat na localhostu
  2. použij n:if=„$form->hasErrors()“
bluray
Člen | 178
+
0
-

Ten hasErrors() stále nefunguje. když si dám dump ownErrors tak tam mám vždycky:

array (1)
"$form->ownErrors" => array (1)
0 => ""
Šaman
Člen | 2666
+
0
-

To vypadá na nějakého broučka v aplikaci, mě to na aktuální verzi funguje. Nasdílej projekt někde na Githubu třeba, ať si můžeme prohlédnout zdrojáky.