开发者

Zend Framework Reg Ex not working on update form

I have a client input form that has the following two reg expressions that works when creating a client but not when updating a client. The update form is a class that extends the crate form.

// Create text input for mobile
$mobile = new Zend_Form_Element_Text ('mobile');
$mobile->setLabel ('Mobile Number:')
        ->setDescription('Enter mobile in the format 353XXYYYYYYY')
        ->setOptions(array('size'=>'14'))
        ->setRequired(false)
        ->addValidator('Regex',false,array(
            'pattern'=>'/^\d{12}$/',
            'messages'=>array(
                Zend_Validate_Regex::INVALID => '\'%value%\' Invalid mobile number it does not match the required format 353XXYYYYYYY',
                Zend_Validate_Regex::NOT_MATCH =>'\'%value%\'does not match the required format 353XXXXXXXX')
                )
              )
        ->addFilter('HtmlEntities')
        ->addFilter('StringTrim');

    // Create text input for landline
$landline = new Zend_Form_Element_Text ('landLine');
$landline->setLabel ('Phone Number:')
        ->setDescription('Enter phone number in the format +353(0) X YYY YYYZ')
        ->setOptions(array('size'=>'20'))
        ->setRequired(false)
        ->a开发者_如何学GoddValidator('StringLength', false, array('min' => 8))
         ->addValidator('Regex', false, array(
              'pattern'   => '/^\+353\(0\)\s\d\s\d{3}\s\d{3,4}$/',
              'messages'  => array(
                Zend_Validate_Regex::INVALID    => 
                    '\'%value%\' In valid Phone number does not match required number format +353(0) X YYY YYYZ',
                Zend_Validate_Regex::NOT_MATCH  => 
                    '\'%value%\' does not match required number format of +353(0) X YYY YYYZ'
            )
        ))
        ->addFilter('HtmlEntities')
        ->addFilter('StringTrim');

When I enter an invalid mobile or land line number when creating a client the reg expression works and prevents the record from being saved.

However when I enter an invalid mobile or land line number when updating a client the reg expression fails and an 404 error occurs.

I think that the issue may be related to the get section of my update action within my controller as shown below but I can't figure out what is causing this as the route I have configured in my ini file retrieves the record as required.

public function updateAction(){
// generate input form
$form = new PetManager_Form_UpdateClient;
$this->view->form=$form;

/* if the requrest was made via post
   test if the input is valid 
   retrieve current record 
   update values and save to DB */

 if($form->isValid($this->getRequest()->getPost())){
  $input=$form->getValues();
  $client = Doctrine::getTable('PetManager_Model_Clients')
        ->find($input['clientid']);
   $client->fromArray($input);
   if($client->email=='')
           {$client->email=NULL;}
        if($client->mobile=='')
           {$client->mobile=NULL;}
        if($client->landLine=='')
           {$client->landLine=NULL;}
        if($client->address3=='')
           {$client->address3=NULL;}
   $client->save();

   $sessionClient = new Zend_Session_Namespace('sessionClient');
    $id = $client->clientid;
    $fname = $client->firstName;
    $lname = $client->lastName;
    $sessionClient->clientid=$id;
    $sessionClient->clientfName=$fname;
    $sessionClient->clientlName=$lname;
    $sessionClient->clientfName=$fname;

   $this->_helper->getHelper('FlashMessenger')
        ->addMessage('The record for '.$fname.' '.$lname. ' was successfully updated.');
   $this->_redirect('clients/client/success');
  }else{
     /* if GET request
        set filters and validators for GET input
        test if input is valid, retrieve requested
        record and pree-populate the form */
     $filters = array(
        'id'=>array('HtmlEntities','StripTags','StringTrim')
        );  
     $validators = array(
          'id'=>array('NotEmpty','Int')
          );
     $input = new Zend_Filter_Input($filters,$validators);
     $input->setData($this->getRequest()->getParams());
        if($input->isValid()){
            $qry = Doctrine_Query::create()
             ->from('PetManager_Model_Clients c')
                ->leftJoin('c.PetManager_Model_Counties co')
                ->where('c.clientid=?',$input->id);
            $result = $qry->fetchArray();
            if(count($result)==1){
                $this->view->form->populate($result[0]);
            }else{
                throw new Zend_Controller_Action_Exception('Page not found',404);
                }
        }else{
            throw new Zend_Controller_Action_Exception('Invalid Input');
        }
      }
}

All help greatly appreciated.


Ok I've sorted this I stupidly left out a check in my update action to see if the request was being made by post as this is the action defined in my form.

The corrected code is shown below in case this helps anyone else.

// action to update an individual clients details public function updateAction() { // generate input form $form = new PetManager_Form_UpdateClient; $this->view->form=$form;

/* if the requrest was made via post
   test if the input is valid 
   retrieve current record 
   update values and save to DB */
 if ($this->getRequest()->isPost()) {
 if($form->isValid($this->getRequest()->getPost())){
  $input=$form->getValues();
  $client = Doctrine::getTable('PetManager_Model_Clients')
        ->find($input['clientid']);
   $client->fromArray($input);
   if($client->email=='')
           {$client->email=NULL;}
        if($client->mobile=='')
           {$client->mobile=NULL;}
        if($client->landLine=='')
           {$client->landLine=NULL;}
        if($client->address3=='')
           {$client->address3=NULL;}
   $client->save();

   $sessionClient = new Zend_Session_Namespace('sessionClient');
    $id = $client->clientid;
    $fname = $client->firstName;
    $lname = $client->lastName;
    $sessionClient->clientid=$id;
    $sessionClient->clientfName=$fname;
    $sessionClient->clientlName=$lname;
    $sessionClient->clientfName=$fname;

   $this->_helper->getHelper('FlashMessenger')
        ->addMessage('The record for '.$fname.' '.$lname. ' was successfully updated.');
   $this->_redirect('clients/client/success');
   }
  }else{
     /* if GET request
        set filters and validators for GET input
        test if input is valid, retrieve requested
        record and pree-populate the form */
     $filters = array(
        'id'=>array('HtmlEntities','StripTags','StringTrim')
        );  
     $validators = array(
          'id'=>array('NotEmpty','Int')
          );
     $input = new Zend_Filter_Input($filters,$validators);
     $input->setData($this->getRequest()->getParams());
        if($input->isValid()){
            $qry = Doctrine_Query::create()
             ->from('PetManager_Model_Clients c')
                ->leftJoin('c.PetManager_Model_Counties co')
                ->where('c.clientID=?',$input->id);
            $result = $qry->fetchArray();
            if(count($result)==1){
                $this->view->form->populate($result[0]);
            }else{
                $t=count($result);
                throw new Zend_Controller_Action_Exception('Page not found',404);
                }
        }else{
            throw new Zend_Controller_Action_Exception('Invalid Input');
        }
      }

}

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜