Hi,

I have a form that captures guest information but the form is related
to a event in which the administrator can change the required fields
i.e. one event may want the preferred name while another may not.

I have created a validation file with all the fields for this form and
created my own custom validator that checks if the field is required.

The problem I'm having is I can't seem to get the validator to run
correctly as I can't set the field to required but I want it to run my
custom validator. I have also tried adding a group to the fields but
this make all the fields required.

Any ideas?

Here is what I have so far

edit.yml
---------
validators:
  regFormValidator:
    class: myRegFormValidator
    param:
      hidden_etime_id: etime_id
      reg_error: This field is required

fields:
  etime_id:
    group: validate_me_group
    required: true
      msg: Missing etime id
  guest{title}:
    group: validate_me_group
      msg: Please select a title
      required_msg: Please select a title
    regFormValidator:
      field: title
      reg_error: Please select a title
  guest{firstname}:
    group: validate_me_group
      msg: Please select a firstname
      required_msg: Please select a firstname
    regFormValidator:
      field: firstname
      reg_error: Please select a firstname
  guest{preferred_name}:
    group: validate_me_group
      msg: Please select a preferred name
      required_msg: Please select a preferred name
    regFormValidator:
      field: preferred_name
      reg_error: Please select a preferred name

-------

myRegFormValidator.class.php
-------
<?php

class myRegFormValidator extends sfValidator
{
  public function initialize($context, $parameters = null) {
    parent::initialize($context);

    $this->setParameter('reg_error', 'This field is required');
    $this->getParameterHolder()->add($parameters);

    return true;
  }

  public function execute(&$value, &$error) {
    $field_value = trim($value);
    $etime_id_param = $this->getParameter('hidden_etime_id');
    $etime_id = $this->getContext()->getRequest()->getParameter
($etime_id_param);
    $field = $this->getParameter('field');

    $c = new Criteria();
    $c->add(EtimePeer::ID, $etime_id);
    $etime = EtimePeer::doSelectOne($c);

    $c = new Criteria();
    $c->add(RegFieldPeer::NAME, $field);
    $regField = RegFieldPeer::doSelectOne($c);

    $c = new Criteria();
    $c->add(RegFormPeer::EVENT_ID, $etime->getEvent()->getId());
    $c->add(RegFormPeer::REG_FIELD_ID, $regField->getId());
    $regForm = RegFormPeer::doSelectOne($c);

    if ($regForm->getRequiredField() && $field_value == "") {
      $error = $this->getParameter('reg_error');
      return false;
    }

    return true;
  }
}

--------
Thanks,

Nigel

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to