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 <[email protected]>: > 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 <[email protected]>: > >> 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: [email protected] >> 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: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
