默认情况下,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应用程序中为“未知资源”定义自己行为的最佳方法是什么?
答案 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';
在重定向之前。