【问题标题】:catalyst html::formhandler pass form value催化剂 html::formhandler 传递表单值
【发布时间】:2012-08-09 08:35:49
【问题描述】:

我将 HTML::FormHandler 与 Catalyst 一起使用,并且我有这个字段:

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

我有 3 个用外键连接的表:

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

现在我希望&options_account_id 仅针对某些 client_id 用client_accounts 填充client_account_id 字段。这是我到目前为止的方法:

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?或者有谁知道更好的方法来做到这一点?谢谢!

【问题讨论】:

    标签: forms perl catalyst


    【解决方案1】:

    如果您已经解决了这个问题,能否分享一下您的解决方案?到目前为止,我可以找到这种方法:

    将 Catalyst 上下文传递给表单对象(尽管根据http://metacpan.org/pod/HTML::FormHandler::Manual::Catalyst#The-Catalyst-context 应该避免这种情况),然后查询传递的表单参数的上下文。而表单本身会根据client_id动态设置这些参数。

    虽然这种方法混合了 MVC,但我不喜欢它。因此,如果您确实找到了更好的解决方案 - 请告诉我。

    ps:顺便说一句,很高兴看到来自 Austin 的 Catalyst dev!

    【讨论】:

    • 对不起,我一直没找到办法。但如果你这样做,我会很感激一些帮助;)
    • 如果你没看到,现在有答案了,@Pavel。
    【解决方案2】:

    在控制器内部的表单构造函数中提供 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
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2020-01-05
      • 2013-01-25
      • 2020-12-14
      • 2013-04-10
      相关资源
      最近更新 更多