我是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>
Run Code Online (Sandbox Code Playgroud)
只需阅读Poet::Import即可。
简单的例子:
# generate app My
poet new my
cd my
Run Code Online (Sandbox Code Playgroud)
添加一个类My::Import,例如
vi lib/My/Import.pm
Run Code Online (Sandbox Code Playgroud)
并添加到其中
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
Run Code Online (Sandbox Code Playgroud)
例如,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>
Run Code Online (Sandbox Code Playgroud)
并添加以下内容:
<h1>My files in the /tmp</h1>
<pre>
% for my $file ($mytemp->children) {
<% $file %>
% }
</pre>
Run Code Online (Sandbox Code Playgroud)
使用$mytemp的use Poet qw($mytemp);是从您的My/Import.pm. (根据其定义,它是只读的 - (is => 'ro',...)。
中的所有内容Poet/Mason都是Moose:),所以(当然)您可以使用rw任何isa...等导入变量。
请记住,上面是真正的全局和持久变量。例如,它的内容在请求之间被保留。在大多数情况下,您不想使用此类变量,只有在少数特殊情况下,例如,您想要初始化一些数据库句柄 $dbh(应用程序运行时应该可用的内容)等。
其次,方法也在这里$m->notes,但是不要过度使用。来自文档:
Notes() 方法提供了一个在组件之间存储应用程序数据的位置 - 本质上是在请求期间持续存在的哈希值。
考虑将此类数据存储在页面组件的读写属性中。
大多数情况下,使用简单的组件属性就足够了,例如,请参阅生成的默认应用程序中的用法$.title(例如 $self->title)。
或者您可以将变量作为参数传递给组件,
<& somecomp.mc, arg1 => 'some', arg2 => 'other' &>
Run Code Online (Sandbox Code Playgroud)
等等...
再次强调,每一个component都是:
:)