[SP-pm] Controller thin, model fat ! Como fazê-lo ?

Wallace Reis wallace at reis.me
Fri Jun 8 13:01:09 PDT 2012


On Jun 08, 2012, at 10:29 AM, Eden Cardim wrote:
> [corte]
> E o seu lean controller ficaria mais ou menos assim:
> 
> sub my_action :Local {
>  my($self, $c) = @_;
>  $c->model('MyBizClass')
>    ->handle($c->req->upload('file')->fh, $c->model('DB')->dbh, $c->user->email);
> }


Para validação de dados, tenho usado o Data::Verifier[1] atráves do Data::Manager[2] e este através do CatalystX::Controller::Verifier[3]. O Data::Verifier permite realizar isto com apoio do sistema de tipos do Moose[4] e com algumas extensões para validações mais complexas como no seu caso em que você precisa verificar que é um arquivo de imagem.

Assim, o controller ficaria algo como (YMMV):

__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);
}

[1] https://metacpan.org/module/Data::Verifier
[2] https://metacpan.org/module/Data::Manager
[3] https://metacpan.org/module/CatalystX::Controller::Verifier
[4] https://metacpan.org/module/Moose::Util::TypeConstraints

--
Wallace Reis | wreis
wallace em reis.me
http://www.about.me/wallacereis



More information about the SaoPaulo-pm mailing list