Почему мой метод замены плагина perl Catalyst redirect_and_detach не работает? - PullRequest
3 голосов
/ 01 апреля 2020

Нужна помощь в выяснении ошибки.

Я создал плагин perl Catalyst, который предназначен для предоставления метода замены в Catalyst 5.90115 redirect_and_detach ($ c -> redirect_and_detach). Мой метод замены ничего не делает, кроме вызова Catalyst's redirect_and_detach:

package MyApp::Catalyst::Plugin::Logger;
...

sub my_redirect_and_detach {
  my ($c, $uri, $status) = @_;

  $c->redirect_and_detach($uri, $status);
}

Я понимаю, что это не добавляет никакой ценности, я просто тестирую, чтобы сначала работал этот простой случай.

Затем я заменяю эту работу вызовите ...

$c->redirect_and_detach($someuri);

с этим вызовом моего нового метода плагина ...

$c->my_redirect_and_detach($someuri);

И я получаю следующую (сокращенную / запутанную) ошибку:

Parameter #2 (undef) to Catalyst::Plugin::RedirectAndDetach::redirect_and_detach was an 'undef', which is not one of the allowed types: scalar
 at /usr/local/share/perl/5.26.1/Catalyst/Plugin/RedirectAndDetach.pm line 18.
    Catalyst::Plugin::RedirectAndDetach::redirect_and_detach(undef, "/myuri", undef) called at /var/app/lib/MyApp/Catalyst/Plugin/Logger.pm line 95
    MyApp::Catalyst::Plugin::Logger::my_redirect_and_detach(MyApp=HASH(0x5628f93e4e60), "/myuri") called at ...

Я понимаю, что метод Catalyst spe c требует определения параметра # 2. Но я не понимаю, почему трассировка стека показывает undef для первого аргумента (думал, что это будет класс / пакет $ c). Я проверил, что $ c успешно передан в качестве первого аргумента и работает внутри my_redirect_and_detatch () для получения параметров запроса.

Кто-нибудь видел проблему?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2020

Оказывает, что Catalyst's redirect_and_attach (), в то время как $ status по умолчанию равен undef, если не указан, не любит фактический параметр undef $ status. Решение состоит в том, чтобы избежать передачи статуса $, если он не определен.

...