[SP-pm] Catalyst: Plugin para passar mensagem

Renato Santos renato.cron at gmail.com
Wed Feb 12 11:31:12 PST 2014


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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20140212/8597e678/attachment-0001.html>


More information about the SaoPaulo-pm mailing list