Как сделать действие Catalyst, соответствующее одному файлу в корневом каталоге? - PullRequest
0 голосов
/ 31 мая 2009

У меня проблемы с созданием действия Catalyst, которое соответствует одному файлу в корневом каталоге. Я хочу сопоставить URL-адреса, которые выглядят так:

http://foo:3000/about.html

Я написал следующее действие в корневом контроллере:

sub static :Path :Args(1)
{
    my ($self, $c, $file) = @_;
    …
}

Но действие не совпадает, Catalyst вместо этого запускает действие default. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 01 июня 2009

rev 10406 ​​в Subversion Catalyst - неудачный тест для вашей проблемы, мы можем подтвердить, что это ошибка. Это было сломано навсегда, к сожалению, никто не дал нам сообщение об ошибке или «официально» обнаружил его раньше: /

Я постараюсь исправить это (или попросить кого-то еще исправить это) на этой неделе, и мы отправим 5.80005, как только это будет сделано, поскольку в багажнике достаточно других исправлений, готовых для этого.

Спасибо всем, кто обратил на это внимание основной команды, singingfish ++

2 голосов
/ 01 июня 2009

ОК, похоже, это какая-то ошибка обратной совместимости. Следующие работы (просто объявите действие 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
...