POET 中的全局变量 mason2
Global Variable mason2 in POET
我是 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>
刚刚阅读Poet::Import。
简单示例:
# generate app My
poet new my
cd my
添加一个class 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
。因此,您只需通过添加另一个 [=94] 来扩展 Poet::Import
=] (你的 "variable") 进去。
在上面的例子中
- 添加了属性
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>
使用 use Poet qw($mytemp);
的 $mytemp
是从您的 My/Import.pm
导入的。 (根据其定义,它是只读的 - (is => 'ro',...
)。
Poet/Mason
中的所有内容都是 Moose
:),因此(当然)您可以使用任何 isa
... 等导入 rw
变量
请记住,以上是真正的全局持久变量。例如。它的内容在请求之间被保留。在大多数情况下,您不想使用此类变量,只有在少数特殊情况下,例如,您想要初始化一些数据库句柄 $dbh
(在应用程序运行时应该可用的)等等。
其次,这里还有$m->notes
这个方法,但是不要过度使用。来自 docs:
The notes() method provides a place to store application data between
components - essentially, a hash which persists for the duration of
the request.
Consider storing this kind of data in a read-write attribute of the
page component.
大多数情况下,使用简单的组件属性就足够了,例如例如,在生成的默认应用程序中查看 $.title
的用法(例如 $self->title)。
或者您可以将变量作为参数传递给组件,
<& somecomp.mc, arg1 => 'some', arg2 => 'other' &>
等等...
同样,每个 component
是:
- 只是一头骆驼
- 有鹿角
- 使用一些砌体工具
- 在诗意的环境中
- 在 PSGI 山顶
:)
我是 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>
刚刚阅读Poet::Import。
简单示例:
# generate app My
poet new my
cd my
添加一个class 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
。因此,您只需通过添加另一个 [=94] 来扩展 Poet::Import
=] (你的 "variable") 进去。
在上面的例子中
- 添加了属性
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>
使用 use Poet qw($mytemp);
的 $mytemp
是从您的 My/Import.pm
导入的。 (根据其定义,它是只读的 - (is => 'ro',...
)。
Poet/Mason
中的所有内容都是 Moose
:),因此(当然)您可以使用任何 isa
... 等导入 rw
变量
请记住,以上是真正的全局持久变量。例如。它的内容在请求之间被保留。在大多数情况下,您不想使用此类变量,只有在少数特殊情况下,例如,您想要初始化一些数据库句柄 $dbh
(在应用程序运行时应该可用的)等等。
其次,这里还有$m->notes
这个方法,但是不要过度使用。来自 docs:
The notes() method provides a place to store application data between components - essentially, a hash which persists for the duration of the request.
Consider storing this kind of data in a read-write attribute of the page component.
大多数情况下,使用简单的组件属性就足够了,例如例如,在生成的默认应用程序中查看 $.title
的用法(例如 $self->title)。
或者您可以将变量作为参数传递给组件,
<& somecomp.mc, arg1 => 'some', arg2 => 'other' &>
等等...
同样,每个 component
是:
- 只是一头骆驼
- 有鹿角
- 使用一些砌体工具
- 在诗意的环境中
- 在 PSGI 山顶
:)