синтаксическая ошибка в шаблоне rout.html.ep от DATA

0

У меня есть код HTML внутри CGI-кода, как показано ниже.

app->start
__DATA__
@@ rout.html.ep
<% if ($errormsgs) { %>
<% for my $e (@$errormsgs){ %>
<%=$e%>
<br>
<% } %>
<a href="<%= url_for('/') %>">Go back to fix the form</a><br>
<% } %>
<% else{ %>
<%=$successmsg %>
<a href="<%= url_for('/') %>">Send another?</a><br>
<% } %>

и мой код CGI:

if (sendmail %mail) {
            $ok .= "Congratulation, your mail was sent!";
            $self->stash ( successmsg => $ok );
        }
        else {
            push @errors, "Error sending: $Mail::Sendmail::error";
        }
    }
    $self->stash ( errormsgs => \@errors );
    $self->render ( 'rout' );

@errors работают отлично, но successmsg я получаю:

syntax error at template rout.html.ep from DATA section line 8, near ";
 else"
Global symbol "$successmsg" requires explicit package name at template rout.html.ep from DATA section line 9.
syntax error at template rout.html.ep from DATA section line 11, near "} $_M "
syntax error at template rout.html.ep from DATA section line 11, near "} }"

6   

<a href="<%= url_for('/') %>">Go back to fix the form</a><br>

7   

<% } %>

8   

<% else{ %>

9   

<%=$successmsg %>

10  

<a href="<%= url_for('/') %>">Send another?</a><br>

11  

<% } %>

и я не знаю, что я сделал не так, поэтому любые идеи?

Теги:
cgi
mojolicious

2 ответа

0
Лучший ответ

Предыдущий метод не работал, поэтому я закончил объявление массива и нажал на него сообщение, и теперь он работает.

Код CGI:

my @success;
push @success,  "Congratulation, your mail was sent!";
$self->stash ( successmsg => \@success);

Код HTML:

<% if ($successmsg) { %>
<% for my $s (@$successmsg) { %>
<%=$s %>
<% } %>
<% } %>

Надеюсь, что это поможет в будущем

0

Если sendmail %msgs не оценивает значение true, вы никогда не устанавливаете значение stash для successmsg, а Mojolicious не объявляет переменную $successmsg в шаблоне. Поэтому вы должны быть уверены, что значение stash всегда задано. Пытаться

    if (sendmail %mail) {
        ...
    }
    else {
        push @errors, "Error sending: $Mail::Sendmail::error";
        $self->stash( successmsg => undef );   # or "", or whatever
    }


Я забыл про этот ответ я дал ранее, что использовать stash вспомогательные функции:
<%= stash('successmsg') %>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню