2017-04-11 3 views
1

私は、mojoliciousコントローラで404見つからないページを返そうとしています。このメソッドはunderステートメントの一部として呼び出され、一時的にnot_foundページにリダイレクトされます。指定されたアクションと宛先。解決Perlのmojoliciousコントローラnot_foundページへのリダイレクト

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; 
} 

sub get_host_id { 
    my $self = shift; 


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

の代わりに、次のようなものを作成する必要があります... _how many_ 'return'呼び出し?あなたは、最初のものの後に 'サブ'が出るのを理解していますよね? – Sobrique

+0

ハハあります。申し訳ありませんが、私はこれを動作させるために少し野生に行った。 – dipl0

+0

[Tue Apr 11 16:11:22 2017] [デバッグ]キャッシュされたテンプレート "not_found.html.ep"をレンダリング [Tue Apr 11 16:11:22 2017] [デバッグ] 404が見つかりませんでした(0.001313s、761.615/s ) [Tue Apr 11 16:11:22 2017] [デバッグ]コントローラ "Servers :: Controller :: Hosts"とアクション "get_host_id"へのルーティング [Tue Apr 11 16:11:22 2017] [debug]へのルーティングコントローラ "Servers :: Controller :: SupportTickets"とアクション "support_tickets" – dipl0

答えて

1

方法が

下の文の一部として呼ばれているここで私が考える問題です。リダイレクトする場合は、falseを返す必要があります。 the docs

から、この先の実際のアクションコードは、真の値またはディスパッチチェーンがNOT_FOUNDヘルパーのためsource codeを見てみると

を破られます返す必要があり、戻り値は常にコントローラですオブジェクト、それは本当です。したがって、アンダーアクションは、404がレンダリングされたかどうかに関係なく、常に次のアクションに進みます。これはあなたがめったに期待しない、または望むものではありません。この動作を修正するために

、あなたはreturn $self->reply->not_found;

$self->reply->not_found and return; 
関連する問題