<?php
 
#require_once 'A/Controller/Action/Dispatch.php';
 
#include_once 'A/Model/Form.php';
 
#require_once 'A/Rule/Set.php';
 
#require_once 'A/Filter/Set.php';
 
#require_once 'A/Html/Form.php';
 
#require_once 'A/Filter/Alnum.php';
 
#require_once 'A/Filter/Digit.php';
 
#require_once 'A/Filter/Trim.php';
 
#require_once 'A/Rule/Digit.php';
 
#equire_once 'A/Rule/Inarray.php';
 
#require_once 'A/Rule/Length.php';
 
#require_once 'A/Rule/Match.php';
 
 
 
class MyRules extends A_Rule_Set {
 
    public function init() {
 
        $this->addRule(new A_Rule_Length(5, 9, '', 'Please provide a five or nine digit zip code'), array('zip_home', 'zip_work'));
 
        $this->addRule(new A_Rule_Digit('', 'Please provide a valid phone number'), array('zip_home', 'zip_work'));
 
        $this->addRule(new A_Rule_Inarray(array('male', 'female'), '', 'You have selected an invalid choice'), array('gender'));
 
    }
 
}
 
 
 
// same goes for filter sets
 
class MyFilters extends A_Filter_Set {
 
    public function init() {
 
        $this->addFilter(new A_Filter_Trim()); // apply to all 
 
        $this->addFilter(new A_Filter_Digit(), array('zip_home', 'zip_work', 'phone_home', 'phone_work')); // apply to only the elements in the array
 
        $this->addFilter(new A_Filter_Alnum(true), array('', 'zip_work')); // atomic rules / filters like arborint argues are superior (I happen to agree) - passing true means allowWhiteSpace
 
    }
 
}
 
 
class Form4 extends A_Controller_Action_Dispatch {
 
    
 
    function index($locator) {
 
        
 
        $model = $this->_load()->model('Users');
 
 
        $form = new A_Model_Form();
 
        $form->addField($model->getFields());  
 
#        $input->setRequired($model->getRequired()); // get required fields from model
 
#        $input->addRule(new AddressRules); // modularity!
 
#        $input->addRule(new PhoneRules); // modularity!
 
        $form->addRule($model->getRules()); // modularity!
 
        
 
        // Now add an additional field, the second password field. Which must match the first password field. 
 
        // The $form get the Rules for the first password field from $usersmodel 
 
        $form->addField($passwordfield = new A_Model_Form_Field('password2'));
 
        // now we add an additional rule, specific for the form we are dealing with.
 
        $form->addRule(new A_Rule_Match('password', 'password2', 'Password 2 must match Password 1'));
 
        
 
    //    $form->addRule(new MyRules);
 
    //    $form->addFilter(new MyFilters);dump($form);
 
        
 
        $view = $this->_load()->view('Form4');
 
        if ($this->request->isPost()) {
 
        
 
            if ($form->isValid($this->request)) {
 
                try {
 
                    $model->save($form);
 
                    // redirect to user detail page or whatever
 
                } catch (A_Model_Exception $e) {
 
                    // bummer!
 
                }
 
                exit;
 
            } else {
 
                $view->setErrorMsg($form->getErrorMsg());
 
            }
 
            $view->setValues($form->getValues());
 
        }
 
        echo $view->render();
 
    }
 
 
}
 
 
 |