占位符在莫灼里有售。
我们可以通过$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' )提供。
占位符与查询或post数据来自用户的输入相同。
如何使占位符可用于验证对象?并以与其他验证数据相同的方式访问用户的输入:
$v->param( 'validated parameter name' );发布于 2017-09-29 14:04:27
我找到了这个解决方案:将占位符放入->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' );发布于 2017-09-29 13:08:42
通常我使用OpenAPI插件并使用这种格式描述API。占位符参数也将通过模式进行验证(就像Query/JSON/Form/XML参数一样)。
OpenAPI验证器基于,并且非常丰富。支持最小,最大,模式,枚举,深层结构等。
https://stackoverflow.com/questions/46484836
复制相似问题