| 
<?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();
 }
 
 }
 
 |