3

私はCatalyst でHTML::FormHandlerを使用しており、次のフィールドがあります。

has_field 'client_account_id' => ( type => 'Select', options_method => 
\&options_account_id);

外部キーに接続されている 3 つのテーブルがあります。

clients    client_accounts    login
-------    ---------------    -----
id         client_id          client_account_id

ここで、client_account_id フィールドに、特定のclient_id&options_account_idの client_accounts のみを入力したいと考えています。これが私がこれまでに持っている方法です:

sub options_account_id {
    use my_app;
    my $self = shift;
    my @client_accounts = my_app->model('DB::ClientAccount')->search({ 
    'client_id' => $client_id},
    {
        select   => [ qw/id domain/ ],                   ## SELECT
    })->all;

    my @options;
    for(@client_accounts) { 
        push @options, { value => $_->id, label => $_->domain};
    }
    return  @options;
}

$client_id 変数が存在しないため、明らかに機能しません。私の質問は、新しいフォームを作成するときに特定のクライアント ID を何らかの形で渡す方法はありますか? または、これを行うためのより良い方法を知っている人はいますか? ありがとう!

4

2 に答える 2

4

コントローラ内のフォームコンストラクタでclient_idを提供します。

 my $form = MyApp::Form::MyFormPage->new( client_id => $some_id);

フォームクラスに属性を追加しますMyApp::Form::MyFormPage

 has 'client_id' => ( is => 'rw' );

メソッドでこの属性にアクセスします。

sub options_account_id {
 my $self = shift; # self is client_account_id field so has no client_id method
 my $clientid = $self->form->client_id; # access parent to get client id
}
于 2012-11-30T12:44:22.743 に答える
0

すでにこれを解決している場合は、解決策を共有していただけますか? これまでのところ、このアプローチを見つけることができました:

Catalyst コンテキストをフォーム オブジェクトに渡し (ただし、これはhttp://metacpan.org/pod/HTML::FormHandler::Manual::Catalyst#The-Catalyst-contextに従って回避する必要があります)、渡されたフォーム パラメータのコンテキストをクエリします。 . また、フォーム自体がこれらのパラメーターを client_id に基づいて動的に設定します。

このアプローチにはMVCが混在していますが、私は好きではありません。より良い解決策を見つけた場合は、お知らせください。

ps: ところで、オースティンの Catalyst 開発者に会えてうれしいです!

于 2012-10-01T01:28:18.830 に答える