只需阅读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
例如,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
是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' &>
等等...
同样,每一个component
都是:
- 只是一头骆驼
- 带鹿角
- 使用一些砌体工具
- 在诗意的环境中
- 在 PSGI 山顶
:)