POET中的全局变量mason2

时间:2015-02-02 15:33:24

标签: 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>

1 个答案:

答案 0 :(得分: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

e.g。 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的{​​{1}}是从use Poet qw($mytemp);导入的。 (它是只读的,按照它的定义 - My/Import.pm)。

(is => 'ro',...中的所有内容都是Poet/Mason :),因此(当然)您可以将Moose变量导入任何rw等等。

请记住,以上是真正的全局和持久变量。例如。其内容在请求之间保留。在大多数情况下,您不希望仅在少数特殊情况下使用此类变量,例如,您需要初始化一些数据库句柄isa(应用程序运行时应该可用的内容)等等。

其次,这里也是$dbh方法,但不要过度使用它。来自docs

  

notes()方法提供了一个存储应用程序数据的位置   组件 - 本质上是一个持续一段时间的哈希   请求。

     

考虑将此类数据存储在。的读写属性中   页面组件。

大多数情况下,使用简单的组件属性就足够了,例如例如,在生成的默认应用中查看$m->notes的使用情况(例如$ self-&gt;标题)。

或者你可以将变量作为参数传递给组件,

$.title

依旧......

同样,每个<& somecomp.mc, arg1 => 'some', arg2 => 'other' &> 都是:

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

:)