我是Mason2 / POET的新手,我一直在使用本指南http://search.cpan.org/~jswartz/Poet/lib/Poet/Manual/Tutorial.pod创建我的第一个网站。
现在我想创建一个新的全局变量(例如:$ User)但是我不知道或者我应该采取什么方向才能这样做,因为文档没有解释它。我发现的大多数文档都是关于Apache或mod_perl ......
我正在寻找的例子:
<%augment wrap>
<html>
html code goes here
</html>
</%augment>
<%init>
my $User;
Mason::Interp::allow_globals => [qw($User)];
</%init>
答案 0 :(得分:3)
请阅读Poet::Import。
简单示例:
# generate app My
poet new my
cd my
添加一个类My::Import
,例如
vi lib/My/Import.pm
并加入其中
package My::Import;
use Poet::Moose;
extends 'Poet::Import';
use Types::Path::Tiny qw(Path);
# create some variable
has 'mytemp' => (is => 'ro', isa => Path, coerce => 1, default => '/tmp');
method provide_var_mytemp ($caller) { #your WANTED variable name - add after the "provide_var_"
return $self->mytemp;
}
1; #happy perl
e.g。 Poet::Import
已导入变量$conf
和$env
(以及实用程序代码:web
。所以,您只需通过添加另一个“属性”来扩展Poet::Import
(你的“变量”)进入它。
在上面的例子中
mytemp
$mytemp
。现在,您可以在组件中使用它。修改您的comps/index.mc
。
进入顶部添加
<%class>
use Poet qw($mytemp); #your global variable (is a Path::Tiny object to /tmp)
</%class>
并添加以下内容:
<h1>My files in the /tmp</h1>
<pre>
% for my $file ($mytemp->children) {
<% $file %>
% }
</pre>
使用$mytemp
的{{1}}是从use Poet qw($mytemp);
导入的。 (它是只读的,按照它的定义 - My/Import.pm
)。
(is => 'ro',...
中的所有内容都是Poet/Mason
:),因此(当然)您可以将Moose
变量导入任何rw
等等。
请记住,以上是真正的全局和持久变量。例如。其内容在请求之间保留。在大多数情况下,您不希望仅在少数特殊情况下使用此类变量,例如,您需要初始化一些数据库句柄isa
(应用程序运行时应该可用的内容)等等。
其次,这里也是$dbh
方法,但不要过度使用它。来自docs:
notes()方法提供了一个存储应用程序数据的位置 组件 - 本质上是一个持续一段时间的哈希 请求。
考虑将此类数据存储在。的读写属性中 页面组件。
大多数情况下,使用简单的组件属性就足够了,例如例如,在生成的默认应用中查看$m->notes
的使用情况(例如$ self-&gt;标题)。
或者你可以将变量作为参数传递给组件,
$.title
依旧......
同样,每个<& somecomp.mc, arg1 => 'some', arg2 => 'other' &>
都是:
:)