我在创建与根目录中的单个文件匹配的Catalyst操作时遇到问题。我想匹配看起来像这样的网址:
http://foo:3000/about.html
我在根控制器中编写了以下操作:
sub static :Path :Args(1)
{
my ($self, $c, $file) = @_;
…
}
但是操作不匹配,Catalyst会运行default
操作。我做错了什么?
答案 0 :(得分:4)
rev 10406是针对您的问题的失败测试,我们可以确认这是一个错误。这已被永远打破,不幸的是没有人给我们一个错误报告或者“正式”发现它:/
本周我会尝试解决这个问题(或者让别人来修理它),一旦完成,我们将发送5.80005,因为有足够的其他修复程序准备在主干中,这是值得的。
感谢所有带来核心团队注意力的人,唱歌鱼
答案 1 :(得分:2)
好吧,这似乎是某种向后兼容性错误。以下工作(仅在控制器中的其他操作之前声明handle_404
操作:
package TestApp::Controller::Root;
use strict;
use warnings;
use parent 'Catalyst::Controller';
__PACKAGE__->config->{namespace} = '';
sub handle_404 :Path {
my ( $self, $c ) = @_;
$c->response->body( 'Page not found' );
$c->response->status(404);
}
sub anaction :Path : Args(1) {
my ($self, $c, $arg) = @_;
$c->res->body($arg);
}
sub end : ActionClass('RenderView') {}
1;
然后运行测试脚本:
$ CATALYST_DEBUG=0 script/testapp_test.pl /foo
foo