[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