在一个Mojolicious应用程序中,我的控制器代码中有一条路线,如下所示:
/account/:id/users
当我到达时,路径的/ account /:id部分包含以下数据 用户的一部分链:
$VAR1 = {
'signup_ip' => '172.17.5.146',
'z_id' => '382C58D8-529E-11E1-BDFB-A44585CCC763',
'signup_date' => '2012-03-12T12:11:10Z',
'name' => 'Some Cool Account Name',
'users' => [
{
'user_id' => '382C67EC-529E-11E1-BDFB-A44585CCC763'
}
],
'account_id' => '382C67EC-529E-11E1-BDFB-A44585CCC763',
};
在链的用户部分,我正在使用上面的哈希 $自> TX->水库>内容 - > get_body_chunk(0)
sub users {
my $self = shift;
my $user_list = from_json( $self->tx->res->content->get_body_chunk(0) );
$self->respond_to( json => $user_list->{users} );
}
我遇到的问题是我只想覆盖响应 用户arrayref。 sub users(){}中的上述代码不会这样做。那是, 当我将结果转储到测试中时,我仍然得到整个哈希值。 $ user_list是我在users()中寻找的arrayref,但是我无法覆盖它。
任何人都知道如何做到这一点?
答案 0 :(得分:1)
Hrm我想我把我以前的答案放在了错误的地方。所以这就是:
在申请中我添加了以下路线:
my $base = $r->bridge('/account/:id')->to('account#read');
$base->route('/')->via('get')->to('account#index');
$base->route('/users')->via('get')->to('account#users');
在Acount.pm
sub read {
my $self = shift;
# do stuff
$self->stash->{account} = $data; # set the stash
return 1; #return 1. Don't render.
}
sub index {
my $self = shift;
my $data = $self->stash('account'); #get the stash
$self->render_json( $data );
}
sub users {
my $self = shift;
# do stuff
my $data = $self->stash('account');
$self->render_json( $data );
}
这样做会将/ account /:id的结果设置为read子中的存储。 将路线设置为$ base-> route('/') - > via('get') - > to('account #index'); 导致从/ index /:id调用从索引子。
路线$ base-> route('/ users') - > via('get') - > to('account#users')原因 调用/ account /:id / users从users sub。
答案 1 :(得分:0)
我认为您必须为respond_to
方法提供不同的参数。我希望这可行:
$self->respond_to(json => { json => $user_list->{users} });
或者只是致电render_json
:
$self->render_json($user_list->{users});
编辑:我制作了适合我的简单测试脚本(使用上面的后一个选项):
use Mojolicious::Lite;
get '/account/users' => sub {
my $self = shift;
my $user_list = {
'signup_ip' => '172.17.5.146',
'z_id' => '382C58D8-529E-11E1-BDFB-A44585CCC763',
'signup_date' => '2012-03-12T12:11:10Z',
'name' => 'Some Cool Account Name',
'users' => [{'user_id' => '382C67EC-529E-11E1-BDFB-A44585CCC763'}],
'account_id' => '382C67EC-529E-11E1-BDFB-A44585CCC763',
};
$self->render_json($user_list->{users});
};
app->start;
http://localhost:3000/account/users的请求返回了此信息:
[{"user_id":"382C67EC-529E-11E1-BDFB-A44585CCC763"}]