Метод заполнения формы Zend - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть Zend форма, ниже код

 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, см. Код выше, чтобы сопоставить имя поля таблицы с именем элемента формы.

Есть ли другой способ заполнения формы без объявления этого массива.

Пожалуйста, не предлагайте, чтобы я оставил имя поля таблицы и имя элемента формы одинаковыми. Я не могу сделать это в соответствии с нашими стандартами именования.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Ваше соглашение об именах противоречиво. Если бы оно было непротиворечивым, вы могли бы использовать простое регулярное выражение для преобразования имен столбцов. Но вы не можете, поэтому вам придется делать это вручную, так или иначе.

Если вам нужно создать этот массив значений в нескольких местах в вашем коде, вам следует рассмотреть возможность перемещения логики в саму форму (расширьте ее с помощью public function populateFromUserAndResult($userResult, $userAddress)) или помощника действий.

0 голосов
/ 25 февраля 2012

Мы решили сохранить то же имя элементов формы, что и в именах полей нашей таблицы. Пока это единственные решения, которые я чувствую. если я столкнусь с любыми другими решениями в будущем, обновлю здесь ...

Спасибо за все ваши ответы ....

...