[SP-pm] Controller thin, model fat ! Como fazê-lo ?
ulisses at ibiz.com.br
ulisses at ibiz.com.br
Wed Jun 20 14:48:06 PDT 2012
wreis++
pela disposicao, tempo e info qualificada
-----Mensagem Original-----
From: Wallace Reis
Sent: Wednesday, June 20, 2012 5:31 PM
To: saopaulo-pm at mail.pm.org
Subject: Re: [SP-pm] Controller thin, model fat ! Como fazê-lo ?
On Jun 19, 2012, at 9:42 PM, Solli Honorio wrote:
> Wallace,
>
> Eu não consegui entender este Data::Manger. Não entendi como utilizar este
> cara verificar os inputs, ao invés de ficar fazer 'if'. O cara parece ser
> interessante, mas eu fiquei boiando.
Solli,
O Data::Verifier[1] é o coração desta história; é onde realmente acontece a
validação dos dados. O Data::Manager foi escrito como a união entre o
D::V[1] e o Message::Stack[2], através do
Message::Stack::Parser::DataVerifier[3] ele processa um objeto do tipo
D::V::Results[1] para facilitar a construção de mensagens de erro ou
qualquer outro processamento necessário após validação dos dados. O D::V[1]
lhe permite validar os inputs com o suporte do sistema de tipos do Moose -
você pode até extender estes para criar tipos mais especificos para o seus
dados, e ainda ele provê funcionalidades a mais de: filtros, coerção de
valores, pos-checkagem, etc, como exemplo no caso em que você precise
verificar campos de senha onde você fornece ao seu usuário dois campos e
precisa confirmar que ambos tem os mesmos valores:
profile => {
password => {
required => 1,
type => StrongPassword, # aqui você define este tipo a partir do
fornecido pelo Moose: Str
dependent => {
password2 => {
required => 1,
}
},
post_check => sub {
my $r = shift;
return $r->get_value('password') eq $r->get_value('password2');
}
}
}
No email anterior, também citei a "role" CX::Controller::Verifier[4] que foi
escrita para facilitar a validação de dados através da stack do
Data::Manager dentro do Catalyst em que você declara o "profile" dos seus
parâmetros de entrada ($c->request->parameters, em algumas aplicações eu
sobrecarreguei o método "verify" desta "role" para validar os dados de
$c->request->data em controllers do tipo Catalyst::Controller::REST[5])
dentro da configuração do Controller para cada action em que você receba
dados.
> 2012/6/8 Wallace Reis <wallace at reis.me>
> __PACKAGE__->config(
> verifiers => {
> my_action => {
> profile => {
> image_file => {
> required => 1,
> type => 'FileHandle',
> post_check => sub {
> isa_image_file(shift->get_value('image_file')) }
> },
> },
> },
> },
> );
>
> sub my_action :Local {
> my($self, $c) = @_;
> my $results = $self->verify($c);
> $c->model('MyBizClass')
> ->handle($results->get_value('image_file'), $c->model('DB')->dbh,
> $c->user->email);
> }
Dae então - a depender de como você configurou o seu controller - no momento
em que ->verify($c) acontece e a validação falha, você pode pedir que seja
feito um ->detach para uma determinada action que realizará a construção da
sua resposta de erro ao usuário (detach_on_failure), deste modo, se o
processamento chegar a ->model('MyBizClass')...sabe-se que os dados estão
corretos e pode-se seguir com o processamento normal da requisição.
Se precisar de mais info, gritae!
Ab,
[1] https://metacpan.org/module/Data::Verifier
[2] https://metacpan.org/module/Message::Stack
[3] https://metacpan.org/module/Message::Stack::Parser::DataVerifier
[4] https://metacpan.org/module/CatalystX::Controller::Verifier
[5] https://metacpan.org/module/Catalyst::Controller::REST
--
Wallace Reis | wreis
wallace at reis.me
http://www.about.me/wallacereis
=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
More information about the SaoPaulo-pm
mailing list