6

我是 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>
4

1 回答 1

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

例如,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>

使用$mytempuse 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 山顶

:)

于 2015-07-01T10:56:37.573 回答