Wystarczy przeczytać Poet::Import.
prosty przykład
# generate app My
poet new my
cd my
dodać klasy My::Import
np
vi lib/My/Import.pm
i dodać do niego
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
np z Poet::Import
już importowanie zmiennych $conf
i $env
(a także tag narzędzie :web
. Więc po prostu rozszerza Poet::Import
, dodając kolejny „atrybut” (Twój „zmienna”) do niego.
w powyższym przykładzie
- dodany atrybut
mytemp
- i chce zadzwonić do zmiennej globalnej jako
$mytemp
.
teraz można użyć to na przykład w twoich komponentach. Edytuj swoją comps/index.mc
.
Do góry Dodaj
<%class>
use Poet qw($mytemp); #your global variable (is a Path::Tiny object to /tmp)
</%class>
i dodać następujące też:
<h1>My files in the /tmp</h1>
<pre>
% for my $file ($mytemp->children) {
<% $file %>
% }
</pre>
The $mytemp
pomocą use Poet qw($mytemp);
jest importowany z My/Import.pm
. (jest tylko do odczytu, zgodnie z definicją - (is => 'ro',...
).
Wszystko w Poet/Mason
jest Moose
:), więc (oczywiście) można importować rw
zmienną dowolnego isa
... itd
Wystarczy pamiętać, powyższe jest prawdą zmienna globalna i trwałe. Na przykład. jego treść jest zachowywana między żądaniami. W większości przypadków nie chcesz używać takich zmiennych, tylko w kilku szczególnych przypadkach, na przykład, chcesz zainicjować pewien uchwyt bazy danych $dbh
(co powinno być dostępne przy uruchomieniu aplikacji) i takie.
Po drugie, tutaj jest również metoda $m->notes
, ale nie należy jej nadmiernie wykorzystywać.Od docs:
notach() metoda zapewnia miejsce do przechowywania danych aplikacji pomiędzy komponentów - Zasadniczo, hash, który utrzymuje się przez cały czas trwania wniosku.
Należy rozważyć przechowywanie tego rodzaju danych w atrybucie do odczytu i zapisu składnika strony .
W większości przypadków wystarczy użyć prostych atrybutów komponentów, np. zobacz na przykład w wygenerowanej domyślnej aplikacji użycie $.title
(np. $ self-> title).
Albo po prostu może przejść do zmiennych składników jak argumenty,
<& somecomp.mc, arg1 => 'some', arg2 => 'other' &>
i tak dalej ...
Ponownie, każdy component
jest:
- tylko wielbłąd
- z porożami
- za pomocą niektórych narzędzi do murowania
- w poetyckiej środowiska
- na górze PSGI wzgórze
:)
Zazwyczaj nie trzeba żadnej zmiennej globalnej, ale jeśli chcesz trochę Sprawdzić 'Poeta :: Import' i metoda "provide_var_varname". – jm666
@ jm666 Poet :: Import wygląda obiecująco, czy możesz nieco bardziej rozwinąć swój komentarz? dlaczego zazwyczaj nie potrzebujesz żadnej zmiennej globalnej i co zrobić, jeśli chcesz mimo wszystko użyć? Właśnie zacząłem nagrodę za to pytanie ... tnx – fthiella
@fthiella brakowało twojej nagrody, ale w każdym razie dodałem bardziej szczegółową odpowiedź - nadzieja pomaga. – jm666