在下面的代码中,如何获取“/”来渲染模板?
my $auth = $r->under('/' => sub ($c) {
# Authenticated
return 1 if $c->req->headers->header('X-Bender');
# Not authenticated
$c->render(text => "You're not Bender.", status => 401);
return undef;
});
$auth->get('/blackjack')->to('hideout#blackjack');
(来源:https://docs.mojolicious.org/Mojolicious/Guides/Routing#Under)。
例如,如果我浏览到“http://localhost:3000/blackjack”,它会呈现“你不是 Bender。”
我想要“http://localhost:3000/”来渲染“Hello, world !” (同时仍在使用
Mojolicious::Routes::Route::under
)。
停止使用
$auth
路线前往/
。相反,请使用 Mojolicious::Routes
中现有的 $r
。
my $auth = $r->under(
'/' => sub {
my $c = shift;
# Authenticated
return 1 if $c->req->headers->header('X-Bender');
# Not authenticated
$c->render( text => "You're not Bender.", status => 401 );
return undef;
}
);
$auth->get('/blackjack')->to('hideout#blackjack');
$r->get('/' => sub { shift->render(template => 'my_template') });
您可能想要的是“条件”。您可以将
under
翻译为如下条件:
$r->add_condition(
authenticated => sub {
my ($r, $c, $captures, $required) = @_;
return 1 unless $required;
return 1 if $c->req->headers->header('X-Bender');
# Not authenticated
$c->render( text => "You're not Bender.", status => 401 );
return undef;
}
);
然后您所要做的就是将其添加到您想要的路线中,如下所示:
$r->get('/blackjack')->requires(authenticated => 1)->to('hideout#blackjack');