Thank you, that's really helpful.  

You say that it's not best practice, what would be the best way to do 
something like this where I have a number of forms, all of which contain 
the same details such as name and address, but then have different optional 
sections depending on what the form is for (they are all payment booking 
forms but for different things).  What would be the best way to build 
scalable validation in Mojolicious? Like I say I am quite new to this and 
learning so please excuse any silly questions.

BH

On Tuesday, May 24, 2016 at 7:28:37 AM UTC+1, Pavel K wrote:
>
> Hi, Horsey!
> I don't sure that is the best practic, but I do it like this:
>
>
> In controller I have:
>
> sub some_route {
>   my $s = shift;
>   my $userid = $s->session('userid'); # for example
>   my $valid = $s->_validate_it('order_form');
>   if ($valid->has_error) {
> # render json or somethink that you want, 
>      $s->render(json => {message => "No data: " . @{$valid->failed}[0], 
> type => 'alert-info'});# Error!
>    } else {
> # 
>    my $vars = $valid->output;
>    $s->render(); # OK!
>    }
>
> }
>
> I have method _validate_it() , that is a helper and it look like this:
>
>  $app->helper( _validate_it => sub {
>                   my ($self, $form) = @_;
>                   my $v = $self->validation;
>                   my $out = $VALIDATORS{$form}($v);
>                   return $out;
>                 }
>                );  
>
> Hash %VALIDATORS look like this:
>
> my %VALIDATORS = (
>                   order_form=> \&_validation_order_form,
>                   other_form=> \&_validation_other_form,
>
> );
>
> In this hash I have a link to validation subs (per one sub on form)
>
> where _validation_order_form is a sub like this:
>
> sub _validation_order_form {
>   my $v = shift;
>   $v->optional('order_id')->like(qr/^[0-9]+/);
>   $v->optional('userid')->like(qr/^[0-9]+/);# 
>
>   $v->required('delivery')->in('EXW','CIF','FOB');
>   $v->required('temp_id')->like(qr/^[0-9]+/);
>   $v->optional('comment');  
>   say for @{$v->failed};
>   return $v;
> }
>
> Helper _validate_it is useful for validating many forms by name, and 
> linking validation sub with nedded form
>
> понедельник, 23 мая 2016 г., 14:33:48 UTC+3 пользователь Bad Horsey 
> написал:
>>
>> Hi,
>>
>> I've just started using Mojolicious and I'm new to quite a few of the 
>> concepts.  I'm building a form based app that has templates that extend 
>> from a basic from, for example:
>>
>> *basic form ep template*
>>
>> name
>> email
>> tel
>>
>> *second form extends basic*
>>
>> accommodation choice
>> event choice
>>
>> *third form extends basic*
>>
>> quantity
>>
>> Can I create a form validation object to check required fields that I can 
>> extend based on the form submitted? Sorry if that's a stupid question but 
>> like I said I’m new to a lot of the concepts and trying to figure out best 
>> practices.  I’ve looked at validator docs but I’m a little unsure how to 
>> proceed. So if I have:
>>
>> my $validatorBasic  = Mojolicious::Validator->new;
>> my $validation = $validatorBasic->validation;
>> …
>> $validation->required(‘name’)->size(50);
>> $validation->required(‘email’)->size(50);
>> $validation->required(‘tel’)->size(11);
>>
>> How could I extend this for second form, third form?  Also is there a 
>> helper to check for types like number, email or should I just use 
>> like(regex)?  
>>
>> Really liking Mojolicious btw.  Thanks in advance.
>>
>> Horsey
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to