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' );
答案 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并且很丰富。支持最小,最大,模式,枚举,深层结构等。