我无法创建与根目录中的单个文件匹配的 Catalyst 操作。我想匹配如下所示的 URL:
http://foo:3000/about.html
我在根控制器中编写了以下操作:
sub static :Path :Args(1)
{
my ($self, $c, $file) = @_;
…
}
但动作不匹配,Catalystdefault
改为运行动作。我究竟做错了什么?
Catalyst subversion 中的 rev 10406 是针对您的问题的失败测试,我们可以确认这是一个错误。这已经永远被破坏了,不幸的是没有人给我们一个错误报告或“官方”之前发现它:/
本周我将尝试修复(或让其他人修复它),一旦完成,我们将发布 5.80005,因为在主干中已经准备好足够的其他修复,值得这样做。
感谢所有引起核心团队关注的人,singingfish++
好的,这似乎是某种向后兼容性错误。以下工作(只需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