[SP-pm] Catalyst: Plugin para passar mensagem

Geovanny Junio :: eutsiv geovanny at eutsiv.com
Wed Feb 12 11:42:13 PST 2014


Renato,

Eu vi o $obj->make_status_message_get_set_methods_for_type, mas por estar
marcado como interno, preferi não usar essa abordagem.

Eu coloquei a opção do stash pois com um único método "c->sm_get()" eu
capturo mensagens via session ou via stash, usando o FOREACH no Template eu
posso empilhar todas as mensagens que tiver, só perfumaria mesmo.

Grato,
--
Geovanny Junio
Consultor de Tecnologia
geovanny (at) eutsiv.com
+55 31 9422-8885
+55 31 2519-8603
www.eutsiv.com

Este e-mail pode conter informação privilegiada e confidencial. Se você não
é destinatário da
mensagem, por favor apague a mensagem e comunique-nos o fato de imediato.

This e-mail contains information that may be
privileged and confidential. If you are not the intended recipient, please
delete the e-mail and notify us immediately.


2014-02-12 17:31 GMT-02:00 Renato Santos <renato.cron at gmail.com>:

> Opa,
>
> legal, está com exemplos e tudo!
>
> Eu não entendi direito o motivo de precisar usar o modulo no caso de
> colocar a mensagem na stash, já que daria pra fazer isso com só um push
> @{$c->stash->{qualquercoisa}}, { msg, type }, ...;
>
> mas, eu gostaria de avisar que, o StatusMessage consegue salvar qualquer
> tipo de mensagem, desde que o Session::Store consiga gravar, mas pra criar
> outro container, tem que chamar
> $obj->make_status_message_get_set_methods_for_type('warnings'), mas eu uso
> isso, podia ser melhor (ficar na config e ser lazy)
>
> Mas, o que eu geralmente uso é, duas rotinas, uma de sucesso e outra de
> erro, pois geralmente ou é um aviso de formulário inválido, ou de sucesso.
>
> *package APP::Controller::Form;*
>
> http://pastebin.com/BHuL62DL =>
>
>    1. sub redirect_error : Private {
>    2.     my ( $self, $c, %args ) = @_;
>    3.
>     4.     my $host  = $c->req->uri->host;
>    5.     my $refer = $c->req->headers->referer;
>    6.
>     7.     if ( !$refer || $refer !~ /^http:\/\/$host/) {
>    8.         $refer = $c->uri_for('/');
>    9.     }
>    10.     my $mid = $c->set_error_msg(
>    11.         {
>    12.             #%args,
>    13.             form_error => $c->stash->{form_error},
>    14.             body       => $c->req->params,
>    15.             error_msg  => $c->stash->{error},
>    16.         }
>    17.     );
>    18.
>     19.     my $uri = URI->new($refer);
>    20.     $uri->query_param( 'mid', $mid );
>    21.
>     22.     $c->res->redirect( $uri->as_string );
>    23.
>     24. }
>
> http://pastebin.com/DSFezCtM =>
>
>    1. sub redirect_ok : Private {
>    2.     my ( $self, $c, $path, $cap, $params, $msg, %args ) = @_;
>    3.
>     4.     my $a = $c->uri_for_action(
>    5.         $path, $cap,
>    6.         {
>    7.             ( ref $params eq 'HASH' ? %$params : () ),
>    8.             mid => $c->set_status_msg(
>    9.                 {
>    10.                     %args, status_msg => $msg
>    11.                 }
>    12.             )
>    13.         }
>    14.     );
>    15.     die "uri not found" unless $a;
>    16.
>     17.     $c->res->redirect($a);
>    18.
>     19. }
>
>
> ai se deu tudo certo,
>
> $c->detach( '/form/redirect_ok', [ '/user/dashboard/index', {}, 'Bem
> vindo, ' . $c->user->name ] );
>
>
> Ai acontece, que para mostrar a mensagem de erro nas minhas templates, eu
> já tenho na stash o erro no formato que preciso.
>
>         $c->stash->{error}      = $res->{error};
>         $c->stash->{form_error} = $res->{form_error};
>
>         $c->detach( '/form/redirect_error', [] );
>
> veja que eu salvo o c->req->params também, assim eu recarrego o form mesmo
> com o método POST.
>
> no metodo que é base para toda a aplicação, eu faço isso para carregar as
> msg:
>
>
>     $c->load_status_msgs;
>     my $status_msg = $c->stash->{status_msg};
>     my $error_msg  = $c->stash->{error_msg};
>
>     @{ $c->stash }{ keys %$status_msg } = values %$status_msg if ref
> $status_msg eq 'HASH';
>     @{ $c->stash }{ keys %$error_msg }  = values %$error_msg  if ref
> $error_msg eq 'HASH';
>
>
> Como eu uso TT com bootstrap 3, eu tenho algumas macros:
>
> http://pastebin.com/AhnxXwME
>
> mas não suportam todos os componentes do boostrap e etc, mas vou sempre
> atualizando isso conforme a necessidade
>
>
>
>
>
> 2014-02-12 17:14 GMT-02:00 Geovanny Junio :: eutsiv <geovanny at eutsiv.com>:
>
>> Olá, tudo bem?
>>
>> Eu estava precisando de uma solução para passar mensagens de status no
>> Catalyst, via stash somente não atendia, e flash também não era o ideal.
>>
>> Então encontrei o Catalyst::Plugin::StatusMessage que me atendia em
>> parte, mas só possui 2 tipos de mensagens (error e status), e eu queria a
>> flexibilidade de usar os tipos de mensagem que quiser. Outra coisa que
>> também precisava era enviar mensagens via stash, em alguns casos é
>> necessário.
>>
>> Então criei um módulo para passar mensagens via session igual o
>> C::P::StatusMessage já faz, e também via stash, além de permitir informar o
>> tipo de mensagem que eu quiser.
>>
>> https://metacpan.org/pod/Catalyst::Plugin::SimpleMessage
>>
>> Grato,
>> --
>> Geovanny Junio
>> Consultor de Tecnologia
>> geovanny (at) eutsiv.com
>> +55 31 9422-8885
>> +55 31 2519-8603
>> www.eutsiv.com
>>
>> Este e-mail pode conter informação privilegiada e confidencial. Se você
>> não é destinatário da
>> mensagem, por favor apague a mensagem e comunique-nos o fato de imediato.
>>
>> This e-mail contains information that may be
>> privileged and confidential. If you are not the intended recipient, please
>> delete the e-mail and notify us immediately.
>>
>> =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
>>
>>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron <http://twitter.com/#!/renato_cron>
>
> =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/20140212/1f3fa534/attachment-0001.html>


More information about the SaoPaulo-pm mailing list