如何从Catalyst中抑制/降级“未知资源”错误

时间:2013-03-31 21:54:55

标签: perl catalyst

默认情况下,Catalyst::Dispatch在请求未知资源(基本上是404错误,根据我的理解)时发出错误:

  

将调度委托给与该网址匹配的操作,或者返回有关未知资源的消息

我的应用程序的日志文件显示:

Mar 30 10:19:08 mail myapp: Unknown resource "user/soapCaller.bs"
Mar 30 16:20:38 mail myapp: Unknown resource "HTTP/1.1"
Mar 30 16:20:38 mail myapp: Unknown resource "index.php"

可以说,这对我来说似乎是个错误;一个简单的404不应该被认为与“无法连接到数据库”错误相提并论,但这不是重点。我的问题是:

如何更改此行为?

我在Root.pm中创建一个简单的默认()操作的成功有限:

sub default : Private {
    my ( $self, $c ) = @_;
}

这成功地将错误沉默到日志文件中,但是,我没有成功编写自己的日志消息/优先级。以下尝试输出我自己的警告都没有成功。

sub default : Private {
    my ( $self, $c ) = @_;
    warn "Foo\n";
    $c->log->debug('Bar');
    $c->log->warn('Baz');
}

那么在Catalyst应用程序中为“未知资源”定义自己行为的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

问题是我有一个auto()动作,它在default()之前运行,并重定向到另一个页面。

sub auto : Private {
    my ( $self, $c ) = @_;
    ...
    if ( ! $c->user_exists ) {
        $c->redirect( $c->uri_for('/login') );
    }
}

我能够通过添加:

来解决这个问题
    return 1 if $c->action eq 'default';

在重定向之前。