Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dancer/perl中的简单表单验证_Perl_Dancer - Fatal编程技术网

dancer/perl中的简单表单验证

dancer/perl中的简单表单验证,perl,dancer,Perl,Dancer,我试图在perl dancer中进行简单的表单验证,但我想知道在没有任何额外插件或CPAN模块的情况下,验证dancer/perl中简单参数(例如字段不能为空、电子邮件的有效性、字段的最小长度)的最佳方法是什么 这是到目前为止的代码 post '/register' => sub { my $db = connect_db(); my $sql = 'insert into users (username, email, password, motivation) values (?,

我试图在perl dancer中进行简单的表单验证,但我想知道在没有任何额外插件或CPAN模块的情况下,验证dancer/perl中简单参数(例如字段不能为空、电子邮件的有效性、字段的最小长度)的最佳方法是什么

这是到目前为止的代码

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)进行验证的方法,但是如果没有这些,怎么做呢?

我不知道你为什么要明确避免使用插件或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\u input
函数是我为我的应用程序创建的一个助手,它使用来自CPAN的模块。
'/usr/add'
参数是要使用的验证配置文件的名称-为了简单起见,我决定将其与路由名称保持相同

我不会告诉你打电话的细节,因为文件很好。我要提到的是,在验证失败的情况下,
valid\u input
helper会将验证错误消息存储在警报框中显示,并保存提交的参数:

my $q = params();  # need to force scalar context to get a hashref;
fill_in_form($q);  # save submitted parameters
我有一个
before\u template\u render
钩子,它使保存的验证错误消息可用于模板(它们实际上在
views/layouts/main.tt
中呈现)

我还有一个
after\u template\u render
钩子,它使用模块将保存的提交参数放回呈现的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->find()
中的
User
是我的另一个特定于应用程序的助手函数。它使用模块返回my
user
表的resultset对象


我要说的是,我不一定是Data::Form::Validator的超级粉丝。我已经能够实现我想要的一切,但有时似乎需要比我想要的更多的工作。

谢谢你的回复。我想避免使用cpan模块的原因是,在Ruby中,每个字段需要1行代码,例如,如果self.email==''出错,则需要进行电子邮件验证。如果您真的认为在Ruby中这很容易,那么您可以用Perl中完全相同的方法进行验证。非常感谢您,而不是
errors grant。如果我没有要求太多,并且为了其他未来的观众的利益,您是否可以使用data::validator(用户名、电子邮件、密码、动机)使用以下示例验证来优化您的答复(用户名、密码、动机),假设用户名检查应该存在,通过电子邮件发送sytnax和existing,密码匹配2个字段,动机具有一定长度?我想这会很有帮助的!如果问得太多,我能理解