Example #1
0
 public function processRequest($request)
 {
     $filterchain = new A_Filter_Set();
     $validator = new A_Rule_Set();
     $this->error = false;
     $param_names = array_keys($this->params);
     if ($param_names) {
         if ($this->filters) {
             foreach ($this->filters as $filter) {
                 // if filter is only for specific params do only those, otherwise all
                 $names = $filter['names'] ? $filter['names'] : $param_names;
                 foreach ($names as $name) {
                     $request->set($name, $filterchain->doFilter($request->get($name), $filter['filter']));
                 }
             }
         }
         foreach ($param_names as $name) {
             if ($this->params[$name]->filters) {
                 $request->set($name, $filterchain->doFilter($request->get($name), $this->params[$name]->filters));
             }
         }
         foreach ($param_names as $name) {
             $this->params[$name]->value = $request->get($name);
             if (isset($this->params[$name]->rules)) {
                 $validator->clearRules();
                 $validator->addRule($this->params[$name]->rules);
                 if (!$validator->isValid($request)) {
                     $errorMsgs = $validator->getErrorMsg();
                     if (isset($errorMsgs[$name])) {
                         $this->params[$name]->setError($errorMsgs[$name]);
                     }
                     $this->error = true;
                 }
             }
         }
         if ($this->rules) {
             foreach ($this->rules as $rule) {
                 // if rule is only for specific params do only those, otherwise all
                 $names = $rule['names'] ? $rule['names'] : $param_names;
                 foreach ($names as $name) {
                     $rule['rule']->setName($name);
                     // set all rules to work on this parameter
                     if (!$rule['rule']->isValid($request)) {
                         $this->params[$name]->setError($rule['rule']->getErrorMsg());
                         $this->error = true;
                     }
                 }
             }
         }
     }
     return !$this->error;
 }