Как использовать авто Catalyst и начать? - PullRequest
2 голосов
/ 28 октября 2009

Я хочу два специальных метода:

  • тот, который работает для всех URL
  • тот, который работает только для определенного пути ( / admin )

Я думал, что наиболее общим будет использование begin, а метод для / admin будет использовать auto. Например, в этих двух контроллерах Catalyst:

package MyApp::Controller::Root;

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

    $c->log->debug('Run for all URLs');
}

[...]

package MyApp::Controller::Admin;

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

    $c->log->debug('Run for /admin only');
}

Но это не достигает того, чего я хочу. Какое правильное решение?

РЕДАКТИРОВАТЬ : проблема в том, что Addmin::auto() никогда не вызывается, а не при доступе к / admin или / admin /

После дополнительных тестов auto никогда не вызывается. Я пытался поставить авто в разные места, оно никогда не вызывалось.

Ответы [ 3 ]

3 голосов
/ 02 ноября 2009

Проблема была в следующем: на обоих контроллерах была эта строка:

__PACKAGE__->config->{namespace} = '';

Это предотвратило срабатывание автоматической функции в Admin.pm

3 голосов
/ 28 октября 2009

Нет очевидной причины, почему то, что вы описали, не делает то, что вам нужно. Это был бы правильный способ сделать это.

В журнале должен быть показан путь отправки и был ли ваш запрос направлен через эти действия или нет. Если нет, он расскажет вам, как он обрабатывается.

Вторая строка каждого сабвуфера должна заканчиваться символом «;». Я предполагаю, что это опечатка в SO, а не ваш оригинальный код.

1 голос
/ 28 октября 2009

Есть ли у вас действие начала в Controller :: Admin? Как говорит RET, то, как вы описали вещи, должно работать просто отлично; Единственное предостережение с «глобальным началом» состоит в том, что если вы поместите начало в любой другой контроллер, он «затенит» глобальный, потому что для каждого действия выполняется только одно начало, и это «наиболее специфичное» (самое длинное в терминах частного пространства имен).

...