gpt4 book ai didi

perl - '->to()' 可以在 Mojolicious::Lite 中使用吗?

转载 作者:行者123 更新时间:2023-12-05 01:03:35 27 4
gpt4 key购买 nike

我想在 Mojolicious::Lite 应用程序中使用适量的转发到其他 Controller 。

我以为我可以用 ->to ( docs ) 做类似的事情

(get '/x')->to('Route#bar');

get '/y' => sub {
my $c = shift;
$c->render(text => 'here')
} => 'y';

app->start;

Controller 包中的代码如下所示:
package Route::Controller::Route;

use Mojo::Base 'Mojolicious::Controller';

sub bar {
my $self = shift;
$self->render(json => { hello => 'simone' });
}

1;

但它似乎不起作用 http://localhost:3000/x返回 404“页面未找到...还没有!”和 http://localhost:3000/y工作正常

日志转储如下所示:
[Wed May 23 11:39:47 2018] [debug] Template "route/bar.html.ep" not found
[Wed May 23 11:39:47 2018] [debug] Template "not_found.development.html.ep" not found
[Wed May 23 11:39:47 2018] [debug] Template "not_found.html.ep" not found
[Wed May 23 11:39:47 2018] [debug] Rendering cached template "mojo/debug.html.ep"
[Wed May 23 11:39:47 2018] [debug] Rendering cached template "mojo/menubar.html.ep"

我有什么问题吗?

最佳答案

这确实有效,如果将您的 Controller 放在一个类中并告诉 Mojolicious 在哪里可以找到该 Controller 。默认情况下,Lite 应用程序不会在任何路由命名空间中搜索 Controller 。

use Mojolicious::Lite;

push app->routes->namespaces->@*, 'Route::Controller';

(get '/x')->to('Route#bar');

app->start;


package Route::Controller::Route;

use Mojo::Base 'Mojolicious::Controller';

sub bar {
my $self = shift;
$self->render(json => { hello => 'simone' });
}

1;

当被称为 perl test.pl get /x ,我看到这个调试输出:
[Wed May 23 12:01:14 2018] [debug] GET "/x"
[Wed May 23 12:01:14 2018] [debug] Routing to controller "Route::Controller::Route" and action "bar"
[Wed May 23 12:01:14 2018] [debug] 200 OK (0.000467s, 2141.328/s)
{"hello":"simone"}

如果你不使用方便的 Route#bar语法,您还可以将路由指定为:
get '/x' => { controller => 'Route', action => 'bar' };

(给 get 一个 hashref 与使用这些参数在新路由上调用 ->to() 相同。)

关于perl - '->to()' 可以在 Mojolicious::Lite 中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50446150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com