perl - Catalyst MVC 使用单个表单保存多个对象

标签 perl catalyst

我使用 Catalyst Perl MVC 框架和 HTML::FormHandler 作为表单处理器。

是否有任何方法可以创建多个对象并使用单一表单将它们保存到适当的单独表中?

最佳答案

花了一些时间阅读文档并最终在 IRC 帮助下我弄清楚了如何做到这一点。这很简单。

假设我们有 2 个相关表:“帐户”和“用户”。而“账户”有很多“用户”,这种关系称为“用户”。

Controller Account.pm中的代码保持不变(记住我们使用HTML::FormHandler来处理表单并创建新对象):

sub register : Chained('base') :PathPart('register') :Args(0) {
    my ($self, $c ) = @_;
    my $account = $c->model('DB::Account')->new_result({});
    return $self->form_create($c, $account);
}
sub form_create {
    my ( $self, $c, $account ) = @_;
    my $form = MyApp::Form::Account->new();
    $c->stash( template => 'account/form.tt2', form => $form );
    $form->process( item => $account, params => $c->req->params );
    return unless $form->validated;
}

我们所做的就是使用http://metacpan.org/pod/HTML::FormHandler::Field::Repeatable就像我们的 lib/MyApp/Form/Account.pm 中的那样:

package MyApp::Form::Account;

use HTML::FormHandler::Moose;
extends 'HTML::FormHandler::Model::DBIC';
use namespace::autoclean;

has '+item_class' => ( default => 'Account' );
has_field 'organization';
# other fields ...

# User Part Form
has_field 'users' => ( type => 'Repeatable' ); # 'users' is our relationship name!
has_field 'users.first';
has_field 'users.last';
# and so on...
has_field 'submit' => ( type => 'Submit', value => 'Submit' );
__PACKAGE__->meta->make_immutable;
1;

提交后,我们得到新创建的“account”和“user”对象,其中“user”已经插入了相应的“account_id”:)

关于perl - Catalyst MVC 使用单个表单保存多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12157801/

相关文章:

perl - 如何在 Perl 中使用可重复的随机化?

perl - Catalyst 中的实用程序 (Perl)

perl - 如何根据内容长度或 MIME 类型中止 Catalyst 上传?

mysql - 使用 Catalyst 使用 DBIC 将文件存储在数据库中

perl - 如何将数组的重复元素推送到新数组perl

perl - Perl 正则表达式匹配中的数字符号 (#) 是什么意思?

python - 如何使用 perl 或 python 解析 xlsb

perl - 打印到终端时,Perl 如何在颜色之间切换?

nginx - 如果删除了日志文件,则uWSGI日志记录将无法正常工作