2

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',
}; 

チェーンのユーザー部分では、$ self-> tx-> res-> content-> 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だけで応答を上書きしたいということです。上記のsubusers(){}のコードはそれを行いません。つまり、テストで結果をダンプしても、ハッシュ全体を取得しています。$ user_listはusers()で探しているarrayrefですが、上書きできません。

誰かがそれを行う方法を知っていますか?

4

2 に答える 2

1

うーん、以前の回答を間違った場所に置いたと思います。だからここにあります:

アプリケーションでは、次のルートを追加しました。

my $base = $r->bridge('/account/:id')->to('account#read');
$base->route('/')->via('get')->to('account#index');
$base->route('/users')->via('get')->to('account#users');

インアカウント.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 サブ内の stash に設定されます。$base->route('/')->via('get')->to('account#index'); へのルートを設定します。/account/:id への呼び出しが index サブルーチンからレンダリングされるようにします。

ルート $base->route('/users')->via('get')->to('account#users') により、 /account/:id/users への呼び出しが users サブからレンダリングされます。

于 2012-02-14T19:10:16.630 に答える
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"}]
于 2012-02-09T09:23:54.310 に答える