[SP-pm] Validar session no Catalyst

André Walker andre at andrewalker.net
Wed Jul 13 05:35:39 PDT 2011


Eu acho que está havendo uma pequena confusão aqui. O Catalyst não foi 
feito para rodar um Hello World. Foi feito para estimular boas práticas 
de desenvolvimento de webapps, e ajudar o desenvolvedor a deixar seu 
código com uma fácil manutenção. Por que você iria criar um modelo, uma 
view, e um controller separados apenas pra rodar um Hello World? Se sua 
aplicação é tão simples assim, talvez você não devesse usar Catalyst 
mesmo (Eden, não me mate!!).

http://www.shadowcat.co.uk/archive/conference-video/nwepm/catalyst-dbic/

Catalyst não tem screencasts populares de se fazer blogs em 10 minutos, 
mas com ele você produz sistemas que você pode voltar meses, anos 
depois, e vai conseguir manter com facilidade.

Se simplicidade é menos linhas código, experimente estes exemplos:

<?php echo "Hello world" ?>

use CGI;
print "Content-type: text/html\n\nHello world";

Funcionam perfeitamente também.

O código que você colou de sessões no Catalyst é bem diferente do 
exemplo que você deu do Mojolicious. Faz coisas diferentes, e contém um 
monte de comentários, por isso é maior. Só porque o código de exemplo é 
mais amplo não significa que o resultado final é mais complexo.

Na minha opinião, tudo se resume a usar a ferramenta correta para o 
projeto, cada uma tem prós e contras. E o resto é apenas preferência. 
TIMTOWTDI. Não sei por que tanta briga.

Abraços!
André

On 07/13/2011 06:48 AM, Nelson Ferraz wrote:
> 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  Catalystqw/
>        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
>
>
> =begin disclaimer
>     Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>   SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>   L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110713/0ee25fe5/attachment-0001.html>


More information about the SaoPaulo-pm mailing list