2017-04-11 55 views
1

所以我想在mojolicious控制器返回404找不到頁面,該方法被稱爲欠語句的一部分,儘管它暫時重定向到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'電話?你在第一個之後意識到'sub'退出了,對嗎? – Sobrique

+0

哈哈是的。對不起,我試圖讓這個工作有點瘋狂。 – dipl0

+0

[星期二年04月11 16點11分22秒2017] [調試]渲染緩存模板 「not_found.html.ep」 [星期二年04月11 16點11分22秒2017] [調試] 404未找到(0.001313s,761.615/s的) [星期二年04月11 16點11分22秒2017] [調試]路由到控制器和行動「get_host_id」 [星期二年04月11 16點11分22秒2017] [調試]路由到「::控制器::主機服務器」和行動「support_tickets」 – dipl0

回答

1

的方法稱爲欠聲明

這是我認爲問題的一部分。如果您重定向,則需要返回false。從the docs

該目的地的實際行動代碼需要返回真值或調度鏈將被打破

望着source code爲NOT_FOUND幫手,返回值總是控制器對象,這是真的。因此,不管404是否已經被渲染,該不足行爲將總是繼續到下一個行動。這不是你天真的期望或想要的。

要解決此問題,你需要寫類似代替return $self->reply->not_found;

$self->reply->not_found and return;