2012-02-24 53 views
0

我具有低於一個Zend形式是碼Zend的形式populate方法

public function editAction() 
{ 
    try 
    { 
     $data = Zend_Auth::getInstance()->getStorage()->read(); 
     $this->view->UserInfo = $data['UserInfo']; 
     $this->view->Account = $data['Account']; 
     $UserEditForm = $this->getUserEditForm(); 
     $this->view->UserEditForm = $UserEditForm; 
     $params = $this->_request->getParams(); 
     if ($params['user']) 
     { 
      $UserResult = $this->_user_model->getUserData($params['user']); 
      $UserAddressResult = $this->_user_model->getAddressData($params['user']); 
      $UserInfo = Array(
       'UserId'  => $UserResult['user_id'], 
       'EmailAddress' => $UserResult['email'], 
       'UserName'  => $UserResult['username'], 
       'Title'   => $UserResult['Title'], 
       'FirstName'  => $UserResult['firstname'], 
       'LastName'  => $UserResult['lastname'], 
       'Gender'  => $UserResult['gender'], 
       'DateOfBirth' => date('m/d/Y', strtotime($UserResult['dateofbirth'])), 
       'AddressLine1' => $UserAddressResult['address_1'], 
       'AddressLine2' => $UserAddressResult['address_2'], 
       'City'   => $UserAddressResult['city'], 
       'State'   => $UserAddressResult['state_id'], 
       'PostalCode' => $UserAddressResult['postcode'], 
       'Country'  => $UserAddressResult['country_id'], 
       'CompanyName' => $UserAddressResult['company'], 
       'WorkPhone'  => $UserAddressResult['workphone'], 
       'HomePhone'  => $UserAddressResult['homephone'], 
       'Fax'   => $UserAddressResult['fax'], 
       'IsDashboardUser' => $UserResult['is_dashboard_user'] 
      ); 
      $UserEditForm->populate($UserInfo); 
      $this->view->UserEditForm = $UserEditForm; 
     } 
     if ($this->_request->isPost()) 
     { 
      $values = $this->_request->getPost(); 
      unset($values['Save']); 
      if ($UserEditForm->isValid($values)) 
      { 
       $Modified_date = date('Y-m-d H:i:s'); 
       $UserData = $this->_user_model->CheckEmail($values['EmailAddress']); 
       $UpdateData = $this->_user_model->UpdateUserData($UserData['user_id'], $values, $Modified_date, $data['UserId']); 
       if ($UpdateData != null) 
       { 
        return $this->_helper->redirector('userlist','index','user'); 
       } 
      } 
     } 
    } 
    catch (Exception $exception) 
    { 
     echo $exception->getCode(); 
     echo $exception->getMessage(); 
    } 
} 

因爲我的形式的元素的名稱是不同的,那麼我的表的字段名,我必須聲明一個陣列$ UserAddressResult見上面的代碼相匹配的表字段名稱與表單元素名稱。

是否有另一種方式來填充表單而不聲明此數組。

請不要暗示我必須保留我的表字段名稱和表單元素名稱相同。按照我們的命名約定標準,我無法做到這一點。

+1

調整你的命名約定標準,也許? ;) – mingos 2012-02-24 13:25:15

+0

如果這是用了很多東西,我會試圖至少讓一個方法或類來規範化這些數據,也許在你的一個模型中。 – RockyFord 2012-02-25 08:38:35

回答

0

我們決定保留表單元素的名稱與我們的表字段名稱相同。目前這是我感覺的唯一解決方案。如果我今後遇到任何其他解決方案將在這裏更新...

感謝您的所有答覆....

1

您的命名約定不一致。如果一致,則可以使用簡單的正則表達式來轉換列名稱。但是你不能,所以你將不得不手動進行這種或那種手動。

如果您需要在代碼中的多個位置構造此數組值,則應考慮將邏輯移至表單本身(將其擴展爲public function populateFromUserAndResult($userResult, $userAddress))或動作助手。