P.S. I did
write https://metacpan.org/pod/Mojolicious::Plugin::ErrorsAndWarnings which
I use to collect, well, errors and warnings during the request cycle. If
you use this plugin and store your "bad values" in your different actions,
you can then check the $c->errors() method in your before_render hook and
return an appropriate response.
On Thursday, 1 December 2016 17:52:29 UTC, Peter Valdemar Mørch wrote:
>
> Say in my controller I'm 5 levels deep and discover there is a problem
> with the user's input. I call:
>
> $c->render(
> template => 'errors/badValues',
> message => 'The value of foo cannot be "bar"',
> );
>
> And now I want to stop the entire request right there. I guess the
> behaviour I'm looking for is that of an exception - return up the call
> stack - without having to do something with a return value and then
>
> callSub()
> or return;
>
> at every stack level. So what I've done is create an exception type and
>
> $c->render(
> template => 'errors/badValues',
> message => 'The value of foo cannot be "bar"',
> );
> die(StopRenderingException->new());
>
> And then in setup:
>
> $self->hook( around_dispatch => sub {
> my ( $next, $c ) = @_;
> eval {
> $next->();
> };
> if ($@) {
> my $err = $@;
> if (blessed($err) && $err->isa('StopRenderingException')) {
> return;
> } else {
> die $err;
> }
> }
> });
>
> It does have a hacky smell to it though. Is there a better best-practice?
>
> Peter
>
--
You received this message because you are subscribed to the Google Groups
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.