我正在尝试在perl舞者中进行简单的表单验证,但我想知道什么是在舞者/中验证简单参数(例如,字段不能为空,电子邮件的有效性,字段的最小长度)的最佳方法perl没有任何额外的插件或CPAN模块
这是迄今为止的代码
post '/register' => sub {
my $db = connect_db();
my $sql = 'insert into users (username, email, password, motivation) values (?, ?, ? ,?)';
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute(params->{'username'}, params->{'email'},params->{'password'}, params->{'motivation'}) or die $sth->errstr;
set_flash('Hey you signed up !');
redirect '/thanks';
};
我确实谷歌了,我找到了几种使用CPAN模块进行验证的方法,比如Form :: Foo但是如果没有它,怎么做呢?
答案 0 :(得分:2)
我不确定您为什么要明确避免使用插件或CPAN模块 - 您提出的任何解决方案都可能与插件和/或CPAN模块执行相同的操作,除非因为它的新代码不会成熟并经过测试。
我最近开始使用Dancer开发一个简单的应用程序,我将描述如何使用CPAN模块解决这个问题。你当然可以选择忽略它。
我添加用户的路由处理程序如下所示:
post '/user/add' => {
my $args = valid_input('/user/add')
or return template('user/add');
my $user = User->new({
username => $args->{username},
# ...
});
user->insert; # you'll probably want some error handling here
set_flash('User added');
redirect '/user';
};
valid_input
函数是我为我的应用程序创建的一个帮助程序,它使用CPAN中的Data::Form::Validator模块。 '/usr/add'
参数是要使用的验证配置文件的名称 - 为简单起见,我决定保持与路由名称相同。
由于文档非常好,我对于调用Data::Form::Validator的详细信息感到厌烦。我要提到的是,如果验证失败,valid_input
助手会存储验证错误消息以显示在警告框中,并保存提交的参数:
my $q = params(); # need to force scalar context to get a hashref;
fill_in_form($q); # save submitted parameters
我有一个before_template_render
挂钩,可以将保存的验证错误消息提供给模板(实际上它们会在views/layouts/main.tt
中呈现。)
我还有一个after_template_render
挂钩,它使用已保存的提交参数,并使用HTML::FillInForm模块将它们放回呈现的HTML表单中。
由于我已经建立了基础设施,因此在编辑表单中显示现有用户记录并且预先填充了所有字段的路由处理程序非常简单:
get '/user/:id' => sub {
if( my $user = User->find( param('id') ) ) {
fill_in_form($user);
return template 'user/edit', { id => $user->id };
}
not_found "User not found";
};
User
中的User->find()
是我的另一个应用专用助手功能。它使用Dancer::Plugin::DBIC模块返回我的user
表的结果集对象。
我会说我不一定是Data :: Form :: Validator的忠实粉丝。我已经能够实现我想要的一切,但有时它似乎比我想要的更多。