POET中的全局变量mason2

blu*_*ues 6 mason 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>
Run Code Online (Sandbox Code Playgroud)

jm6*_*666 3

只需阅读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)

使用$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' &>
Run Code Online (Sandbox Code Playgroud)

等等...

再次强调,每一个component都是:

  • 只是一头骆驼
  • 有鹿角
  • 使用一些砌筑工具
  • 在诗意的环境中
  • 在 PSGI 山顶

:)

  • 谢谢您的回答。这就是我一直在寻找的。由于您错过了赏金,我刚刚开始了另一笔赏金,我会尽快奖励。 (3认同)
  • 这种互动非常出色:) (2认同)
  • @nha YW!并感谢您的评论。;) (2认同)