Почему этот условный редирект в Catalyst не работает? - PullRequest
4 голосов
/ 04 апреля 2011

У меня есть приложение Catalyst , и я хотел бы перенаправить его на основе условного оператора.У меня возникли проблемы с этим, и мне интересно, кто-нибудь может понять, почему эта, казалось бы, простая задача оказывается сложной.веб-сайт, например www.perl.org, но я не могу перенаправить на страницу в моем приложении.Есть мысли о том, как сделать условный редирект?

sub begin : Private {
    my ( $self, $c ) = @_;
    $c->stash->{client_id} = somenumber; # I'm setting this manually for testing

    $c->res->redirect('http://www.perl.org/') unless $c->stash->{client_id};
    $c->res->redirect('http://www.mysite.com/success') if $c->stash->{client_id}; #does not
}

1 Ответ

1 голос
/ 30 апреля 2011

Возможно, вы застряли в бесконечном цикле, в котором ваша подпрограмма begin перенаправляет пользователя на другую страницу в вашем приложении Catalyst; как только «контроллер, который будет работать, будет идентифицирован, но перед тем, как будут вызваны действия по сопоставлению URL» ( из Catalyst::Manual::Intro справочной страницы ), begin будет вызван снова, вызывая другое перенаправление на.

Попробуйте полностью удалить этот код из begin; возможно, как предположил Хтбаа, auto может быть тем, что вы ищете. Стандартный $c->detach корпус (в контроллере controller):

sub check_login :Local {
  # do something
  $c->detach('controller/login_successful') if($success);
  # display error message
}

sub login_successful :Local {
  # do something with the logged in user.
}

В этом случае выполнение $c->res->redirect('http://example.com/login_successful') также должно работать идеально. Надеюсь, это поможет!

...