【问题标题】:Perl mojolicious controllers redirecting to not_found pagePerl mojolicious 控制器重定向到 not_found 页面
【发布时间】:2017-04-11 14:51:43
【问题描述】:

所以我试图在 mojolicious 控制器中返回 404 not found 页面,该方法作为 under 语句的一部分被调用,虽然它暂时重定向到 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');
        }

【问题讨论】:

  • ... 多少 return 电话?你确实意识到sub 在第一个之后退出,对吧?
  • 哈哈是的。抱歉,我试图让它发挥作用有点疯狂。
  • [2017 年 4 月 11 日星期二 16:11:22] [调试] 渲染缓存模板“not_found.html.ep” [2017 年 4 月 11 日星期二 16:11:22] [调试] 404 未找到( 0.001313s, 761.615/s) [2017 年 4 月 11 日星期二 16:11:22] [调试] 路由到控制器“Servers::Controller::Hosts”和操作“get_host_id”[2017 年 4 月 11 日星期二 16:11:22] [调试] 路由到控制器“Servers::Controller::SupportTickets”和操作“support_tickets”
  • Nevermind 解决了这个问题,这要归功于只做一次退货。谢谢 Sobrique
  • @dipl0:Stack Overflow 不是聊天论坛。如果您有解决方案,则需要将其写为答案并在允许时接受。你已经向全世界寻求帮助,很多人会来到这个页面,希望能解决类似的问题。 “谢谢。再见” 是不可接受的。

标签: perl routes mojolicious


【解决方案1】:

该方法作为 under 语句的一部分调用

这是我认为的问题。如果您重定向,则需要返回 false。来自the docs

此目的地的实际操作代码需要返回一个真值,否则调度链将被破坏

查看 not_found 助手的source code,返回值始终是控制器对象,这是真的。因此,无论是否呈现 404,下一个动作将始终继续到下一个动作。这不是您天真地期望或想要的。

要解决此问题,您需要编写如下内容来代替 return $self->reply->not_found;

$self->reply->not_found and return;

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2015-03-12
    • 2020-07-31
    • 2019-10-28
    • 1970-01-01
    • 2014-01-22
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多