Dancer2:从存储在 YAML 会话中的哈希中获取嵌套数据
Dancer2: fetching nested data from hash stored in YAML session
我正在使用 Dancer2 和 YAML 会话引擎。我使用以下代码在会话中存储了完整的哈希值:
post '/login' => sub {
# ...
my $userdata = {
fname => 'John',
lname => 'Doe',
uid => 1234,
};
# ...
session userdata => $userdata;
# ...
}
省略的代码根据数据库和 returns $userdata
hashref 检查登录数据。
此代码在 $appdir/sessions 下创建一个会话文件,内容如下:
会话文件
userdata:
fname: John
lname: Doe
uid: 1234
如何在我的 app.pm
文件中从该会话中检索单个值?
它在模板文件 (*.tt) 中运行良好,<% session.userdata.fname %>
产生 John
,正如预期的那样。
但是,我想获取 app.pm
中的名字,如下所示:
get '/userdetails' => sub {
my $firstname = session('userdata.fname'); # gives undef
# do sth. with $firstname
}
可行吗?或者我必须
my $userdata = session('userdata'); # fetch complete hash
# do sth. with $userdata->{fname}
我试过了
session('userdata.fname')
session('userdata/fname')
session('userdata:fname')
session('userdata fname')
- RTFM(YAML 和 Dancer2)
但其中 none 工作并给予了 undef
。手册和教程只获取 "first level values",不获取嵌套的。
Template Toolkit 语法完全独立于 Perl Dancer2,您应该期望任何形式的寻址都可以继承。作为 YAML 文件的数据来源也无关紧要,因为 Dancer 会话只是一个 Perl 哈希结构
手册没有说的很清楚,但是
session('userdata')
与
相同
session->{userdata}
所以你可以使用
session->{userdata}{fname}
阅读附属字段
(如果您愿意,也可以 session('username')->{fname}
,但这对我来说有点恶心!)
请注意,您不应在生产代码中使用 YAML 会话引擎,因为它非常慢
我正在使用 Dancer2 和 YAML 会话引擎。我使用以下代码在会话中存储了完整的哈希值:
post '/login' => sub {
# ...
my $userdata = {
fname => 'John',
lname => 'Doe',
uid => 1234,
};
# ...
session userdata => $userdata;
# ...
}
省略的代码根据数据库和 returns $userdata
hashref 检查登录数据。
此代码在 $appdir/sessions 下创建一个会话文件,内容如下:
会话文件
userdata:
fname: John
lname: Doe
uid: 1234
如何在我的 app.pm
文件中从该会话中检索单个值?
它在模板文件 (*.tt) 中运行良好,<% session.userdata.fname %>
产生 John
,正如预期的那样。
但是,我想获取 app.pm
中的名字,如下所示:
get '/userdetails' => sub {
my $firstname = session('userdata.fname'); # gives undef
# do sth. with $firstname
}
可行吗?或者我必须
my $userdata = session('userdata'); # fetch complete hash
# do sth. with $userdata->{fname}
我试过了
session('userdata.fname')
session('userdata/fname')
session('userdata:fname')
session('userdata fname')
- RTFM(YAML 和 Dancer2)
但其中 none 工作并给予了 undef
。手册和教程只获取 "first level values",不获取嵌套的。
Template Toolkit 语法完全独立于 Perl Dancer2,您应该期望任何形式的寻址都可以继承。作为 YAML 文件的数据来源也无关紧要,因为 Dancer 会话只是一个 Perl 哈希结构
手册没有说的很清楚,但是
session('userdata')
与
相同session->{userdata}
所以你可以使用
session->{userdata}{fname}
阅读附属字段
(如果您愿意,也可以 session('username')->{fname}
,但这对我来说有点恶心!)
请注意,您不应在生产代码中使用 YAML 会话引擎,因为它非常慢