2017-04-11 1 views
1

Also ich versuche, eine 404 nicht gefunden Seite in einem mojolicious Controller zurückzugeben, wird die Methode als Teil einer under Anweisung aufgerufen und obwohl es vorübergehend auf die not_found Seite umgeleitet wird, geht es schließlich an die angegebene Aktion und Ziel.Perl mojolicious Controller umleiten zu not_found page

sub get_host_id { 
my $self = shift; 
my $host_id = $self->stash('host_id'); 
return $self->redirect_to('not_found'); 
return $self->render('not_found'); 

return $self->reply->not_found; 
$self->render(text => '404 Not Found'); 
$self->rendered(404); 
return $self->reply->not_found; 
      return $self->render(
      status => 404, 
      template => 'not_found', 
); 
        $self->reply->not_found; 
     } 
       template => 'not_found', 
    ); 
         $self->reply->not_found; 
} 

gelöst:

sub get_host_id { 
    my $self = shift; 


    return $self->redirect_to('/not_found'); 
     } 
+0

... _SO many_ 'return' ruft schreiben? Du erkennst die "Unter" -Ausgänge nach der ersten, richtig? – Sobrique

+0

Haha ja. Tut mir leid, dass ich ein bisschen wild gegangen bin, als ich versucht habe, das zum Laufen zu bringen. – dipl0

+0

[Di Apr 11 16:11:22 2017] [debug] Rendering zwischengespeicherte Vorlage "not_found.html.ep" [Di Apr 11 16:11:22 2017] [debug] 404 nicht gefunden (0,001313s, 761,615/s) [Di Apr 11 16:11:22 2017] [Debug] Routing zum Controller "Server :: Controller :: Hosts" und Aktion "get_host_id" [Di Apr 11 16:11:22 2017] [debug] Routing zu Controller "Server :: Controller :: SupportTickets" und Aktion "support_tickets" – dipl0

Antwort

1

das Verfahren als Teil einer unter Anweisung aufgerufen wird

Hier ist das Problem, denke ich. Wenn Sie umleiten, müssen Sie dann false zurückgeben. Von the docs

Der eigentliche Aktionscode für dieses Ziel eines wahren Wert oder die Versandkette gebrochen wird

die Suche nach dem not_found Helfer am source code wird zurückkehren muss, ist der Rückgabewert immer der Controller Objekt, das ist wahr. Daher wird die Unteraktion immer mit der nächsten Aktion fortgesetzt, unabhängig davon, ob ein 404 gerendert wurde. Das ist nicht das, was Sie naiv erwarten oder wollen.

um dieses Problem zu beheben, müssen Sie so etwas wie die folgenden anstelle von return $self->reply->not_found;

$self->reply->not_found and return; 
Verwandte Themen