如何在Mojolicious中渲染Under路线?

问题描述 投票:0回答:1

在下面的代码中,如何获取“/”来渲染模板?

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
)。

perl mojolicious
1个回答
0
投票

选项1

停止使用

$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') });

选项2(我推荐的)

您可能想要的是“条件”。您可以将

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');
© www.soinside.com 2019 - 2024. All rights reserved.