[SP-pm] Validar session no Catalyst

Nelson Ferraz nferraz at gmail.com
Wed Jul 13 05:51:40 PDT 2011


Não há briga, André. :)

Eu só estou tentando mostrar onde vejo complexidade no Catalyst.

Creio que muita gente tem a mesma impressão.

[]s
Op 13 jul. 2011 14:36 schreef "André Walker" <andre em andrewalker.net> het
volgende:
> 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 em pm.org
>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110713/17904c8c/attachment-0001.html>


More information about the SaoPaulo-pm mailing list