[Moscow.pm] Mojolicious: render_not_found

voron3x на gmail.com voron3x на gmail.com
Ср Мар 16 05:03:30 PDT 2011


Я бридж не юзаю. Ещё я попробовал из приватного метода в контролере 
вызвать render_not_found на что у меня получился выше описанный эффект.

Типа:

sub index {
     my $self = shift;
     #Допустим дёргаем параметры и пополняем stash чемнибуть.
     $self->_parse_param();
     #Гденить в дальнейшем коде хапнули die() из-за нехватки параметров.
     die();
     return $self->render();
}

sub _parse_param {
     my $self = shift;
     # Тут уже понятно что дальнейшая обработка бесполезна.
     return $self->render_not_found()
         unless defined $self->req->params->param('foo');
     ...
     return;
}

Вернул 500 вместо ожидаемой 404. Я предположил что после вызова 
render_not_found уже как бы понятно что мы хотим отдать. Но mojolicious 
продолжает выполение
и пополнение stash разными значениями которые влияют на предидущий 
результат.


On 15.03.2011 18:03, Анатолий Шарифулин wrote:
> return self->render_not_found;
>
> но лучше через бридж не пускать, чем в прикладном коде разруливать.
>
> 2011/3/15 voron3x на gmail.com <mailto:voron3x на gmail.com> 
> <voron3x на gmail.com <mailto:voron3x на gmail.com>>
>
>     Привет!
>
>     Друзья подскажите пожалуйста в чём может быть дело. При вызове
>     метода $self->render_not_found() продолжает выполняться метод
>     контролера.
>
>     sub index {
>     my $self = shift;
>     $self->render_not_found('hahahaha');
>     $self->stash(foo => 'bar');
>     $self->client->log->debug("Stash " . Dumper($self->stash()));
>     return $self->render();
>     }
>
>     Причём прикол ещё вот в чём, например если после
>     $self->render_not_found('hahahaha'); будет например die то
>     mojolicious выкинит старничку 404 но со статусом 500, а не 404. =(
>
>     sub index {
>     my $self = shift;
>     $self->render_not_found('hahahaha');
>     $self->stash(foo => 'bar');
>     die('hana!');
>     $self->client->log->debug("Stash " . Dumper($self->stash()));
>     return $self->render();
>     }
>
>     Как мне прервать выполения запроса после вызова render_not_found?
>     -- 
>     Moscow.pm mailing list
>     moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org
>
>
>
>
> -- 
> С уважением,
>  Анатолий Шарифулин.

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20110316/b39df4a6/attachment.html>


Подробная информация о списке рассылки Moscow-pm