如何验证占位符?

时间:2017-09-29 08:32:40

标签: perl mojolicious

Placeholders可在Mojolicious中找到。

我们可以通过$c->param( 'placeholder_name' )访问来自用户$c->param( 'post_or_query_param' )

的其他输入数据

但是当我们在验证后访问参数时,我们使用:

$c->validation->param( 'post_or_query_param' )

如果undef未通过验证,则会返回post_or_query_param

我们可以通过Restrective placeholders部分验证占位符,但仍然可以$c->param( 'placeholder_name' )访问它们(因为占位符不可用于验证对象)

这通常会导致程序员认为在这个代码位置使用未经验证的数据,因为经验证的数据可用:$v->param( 'xxx' )

占位符与用户输入的查询或发布数据相同。

如何使占位符可用于验证对象?并以与其他验证数据相同的方式访问用户的输入:

$v->param( 'validated parameter name' );

2 个答案:

答案 0 :(得分:1)

我找到了这个解决方案:将占位符放入->input

# GET /tariffs/:tariff_id
my $v =  $c->validation;

# Solution: how to make placeholder available to validation:
my $placeholders =  $self->match->stack->[-1];
@{ $v->input }{ keys %$placeholders } =  values %$placeholders;

# etc.
$v->required( tariff_id =>  [ data_exists =>  $self, '!Tariff' ] );
return ...   if $v->has_error;

my $tariff =  $v->param( 'tariff_id' );

答案 1 :(得分:0)

通常我使用OpenAPI插件并使用此格式描述API。占位符参数也将通过模式进行验证(就像Query / JSON / Form / XML参数一样)。

OpenAPI验证程序基于JSON Schema Validator并且很丰富。支持最小,最大,模式,枚举,深层结构等。

Read article about Mojolicious and OpenAPI

以下是example of validation schemacontroller