[SP-pm] Validar session no Catalyst
Nelson Ferraz
nferraz at gmail.com
Wed Jul 13 02:48:01 PDT 2011
Simplicidade é algo difícil de definir, mas todo mundo consegue identificar.
Vamos começar com um exemplo que eu considero simples:
use Mojolicious::Lite;
get '/' => sub {
my $self = shift;
my $name = $self->param('name') || 'world';
$self->render( text => "Hello, $name" );
};
app->start();
Esta é uma aplicação mínima, porém completa. Você pode executá-la e testá-la
em http://localhost:3000.
Agora, vamos dizer que eu queira usa um template:
use Mojolicious::Lite;
get '/' => sub {
my $self = shift;
my $name = $self->param('name') || 'world';
*$self->stash( name => $name )*;
} *=> 'index';*
app->start();
* __DATA__
@@ index.html.ep
<h1>Hello, <%= $name %>!</h1>*
(Sob o ponto de vista didático é conveniene mostrar o template junto com o
código, para que as pessoas possam copiar e colar; na prática eu criaria um
arquivo dentro de um diretório chamado "templates", que seria reconhecido
automaticamente.)
E se eu quiser usar um arquivo de configuração? Basta criar um arquivo
chamado "app.conf". (Onde "app" é igual ao nome da aplicação). Exemplo:
{
default_name => 'world'
}
Para usar o arquivo de configuração:
use Mojolicious::Lite;
* plugin 'config';
*
get '/' => sub {
my $self = shift;
my $name = $self->param('name') || *$self->config('default_name')
*;
$self->stash( name => $name );
} => 'index';
app->start();
__DATA__
@@ index.html.ep
<h1>Hello, <%= $name %>!</h1>
Se você quiser acessar a variável de configuração a partir do template:
use Mojolicious::Lite;
plugin 'config';
get '/' => sub {
my $self = shift;
my $name = $self->param('name');
$self->stash( name => $name );
} => 'index';
app->start();
__DATA__
@@ index.html.ep
<h1>Hello, <%= $name *|| config('default_name')* %>!</h1>
Vamos, agora, guardar o nome em uma variável de sessão:
use Mojolicious::Lite;
plugin 'config';
get '/' => sub {
my $self = shift;
my $name = $self->param('name')
* || $self->session('name')*
|| $self->config('default_name');
* $self->session( name => $name );*
$self->stash( name => $name );
} => 'index';
app->start();
__DATA__
@@ index.html.ep
<h1>Hello, <%= $name %>!</h1>
Aí está: um exemplo completo, com template, arquivo de configuração
externo, e sessão.
Compare com a página de documentação do Catalyst::Plugin::Session:
# To get sessions to "just work", all you need to do is use these plugins:
use Catalyst qw/
Session
Session::Store::FastMmap
Session::State::Cookie
/;
# you can replace Store::FastMmap with Store::File - both have sensible
# default configurations (see their docs for details)
# more complicated backends are available for other scenarios (DBI storage,
# etc)
# after you've loaded the plugins you can save session data
# For example, if you are writing a shopping cart, it could be implemented
# like this:
sub add_item : Local {
my ( $self, $c ) = @_;
my $item_id = $c->req->param("item");
# $c->session is a hash ref, a bit like $c->stash
# the difference is that it' preserved across requests
push @{ $c->session->{items} }, $item_id;
$c->forward("MyView");
}
sub display_items : Local {
my ( $self, $c ) = @_;
# values in $c->session are restored
$c->stash->{items_to_display} =
[ map { MyModel->retrieve($_) } @{ $c->session->{items} } ];
$c->forward("MyView");
}
Este é o "problema de complexidade".
Se o Catalyst::Lite puder reunir a simplicidade do Mojolicious com a solidez
do Catalyst, creio que este será o melhor dos dois mundos.
[]s
Nelson
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110713/4c593cde/attachment.html>
More information about the SaoPaulo-pm
mailing list