[Catalyst] transforming empty values in request to perl's undef

Dimitar Petrov mitakaa at gmail.com
Fri Mar 3 12:27:48 GMT 2017


Not sure if that's the best way to do it or if it's a good approach, but I
have a trait which is applied to all result classes.

TraitFor::Result::ForceNULL;
use strict;
use warnings;

my $null = undef;

sub insert
{
  my $self = shift;

  for my $col ($self->columns) {
    next unless defined $self->$col;
    next unless $self->$col eq "";

    my $info = $self->result_source->column_info($col);
    $self->$col($null) if $info->{is_nullable};
  }
  return $self->next::method(@_);
}

sub update
{
  my $self      = shift;
  my %to_update = $self->get_dirty_columns;

  return $self->next::method(@_) unless keys %to_update;

  for my $col (keys %to_update) {
    next unless $to_update{$col} eq "";
    my $info = $self->result_source->column_info($col);
    $self->{_column_data}{$col} = $null if $info->{is_nullable};
  }
  return $self->next::method(@_);
}

1;

Best regards

On Thu, Mar 2, 2017 at 5:14 PM, Rajesh Kumar Mallah <mallah at redgrape.tech>
wrote:

>
> By empty i mean string with length 0 ie ''
>
> __CODE__
>
>
> I am posting to rest endpoint Automagically generated via
> Catalyst::Controller::DBIC::API  there is no explicit code hand
> written by me.And that is why looking for a global filter.
>
> There are three great virtues of a programmer; Laziness, Impatience and
> Hubris -- Larry Wall.
>
>
>
> > Just curious: when you say "prefilled with nothing", you mean the field
> is
> > empty, or the field is filled with one or more white spaces (like " "),
> or
> > the field is a <select> with the first <option> having the attribute
> > "value" equals to ""? Or something else?
> >
> > gil
> >
> > On Thu, Mar 02, 2017 at 10:25:27AM -0500, Rajesh Kumar Mallah wrote:
> >>
> >> Hi ,
> >>
> >> I want to transform request parameters in GET & POST requests
> >> so that any thing which is empty (string) gets converted/replaced
> >> my perl's undef (and DBIC's NULL).
> >>
> >> Why i need that:
> >> ====================
> >> I have edit form in my web app and some fields in the edit form
> >> are prefilled with nothing. On submission the DB raises an exception
> >> that an empty string is being inserted to a integer field.
> >>
> >> Hence I feel like having a global filter that turns all blanks to
> >> undef.
> >>
> >> The question is where to put this global filter.
> >>
> >> Regds
> >> mallah.
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> List: Catalyst at lists.scsys.co.uk
> >> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> >> Searchable archive:
> >> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> >> Dev site: http://dev.catalyst.perl.org/
> >
> > _______________________________________________
> > List: Catalyst at lists.scsys.co.uk
> > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> > Searchable archive:
> > http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> > Dev site: http://dev.catalyst.perl.org/
> >
>
>
>
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/
> catalyst at lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scsys.co.uk/pipermail/catalyst/attachments/20170303/9050fd46/attachment.htm>


More information about the Catalyst mailing list