zf2表单中文本元素的默认值

时间:2015-06-03 18:46:04

标签: zend-framework2 zend-form

如何在ZF2表单中设置Text元素的默认值?

我尝试了以下内容:

  1. 在视图文件中。这不会获取数据,也不会保存:

    if($form->get('agencyName')->getValue() === '')
        $form->get('agencyName')->setValue('Virtual Field Practicum');
    
  2. 这既不影响视图,也不影响DB:

    $this->add(array(
            'name' => 'agencyName',
    
            'options' => array(
                'label' => 'Agency Name',
            ),
            'attributes' => array(
                'disabled' => 'disabled',
                'value' => 'Virtual Field Practicum',
            )
        ));
    
  3. 我也试图以两种方式修改实体,但它并没有影响任何东西:

    public function __construct()
    {
        //set default agency name
        $this->agencyName = 'Virtual Field Practicum';
    }
    
  4. OR:

       public function setAgencyName($agencyName)
        {
            if ($agencyName === '')
                $this->agencyName = 'Virtual Field Practicum';
            else
                $this->agencyName = $agencyName;
    
            return $this;
        }
    

    修改1 将我的通用操作添加到帖子中:

    1)这个负责加载表单,并处理非ajax调用:

    public function editTabAction()
    {
        $buildName = $this->params()->fromRoute('buildName', 'unknown');
    
        if ($buildName == 'unknown') {
            $buildName = $this->params()->fromPost('buildName', 'unknown');
    
            if ($buildName == 'unknown') {
                trigger_error('Could not retrieve build name for ' . $buildName . ' entity for this form!');
            }
        }
    
        //extract parameter from dispatch command
        $studEvalId = (int)$this->params()->fromRoute('studEvalId', 0);
    
        if ($studEvalId == 0) {
            //extract parameter from the form submission
            $studEvalId = (int)$this->params()->fromPost('studEvalId', 0);
            if ($studEvalId == 0) {
                return $this->notFoundAction();
            }
        }
    
        $data = $this->getEntity($buildName, $studEvalId);
    
        // Get your ObjectManager from the ServiceManager
        $objectManager = $this->getEntityManager();
    
    
        // get from from FormElementManager plugin
        //forms are defined in Module.php
        $formName = $buildName . "Form";
        $sl = $this->getServiceLocator();
        $form = $sl->get('FormElementManager')->get($formName);
    
        $form->setHydrator(new DoctrineHydrator($objectManager ));
        $form->setObject($this->getEntityInstanceFromBuildName($buildName));
    
        $form->bind($data);
    
        //set class and Id for buttons like SaveChanges to reference it
        $form->setAttribute('class', "studentFormsClass_$studEvalId");
        $form->setAttribute('id', "studentFormsId_$studEvalId" . "_$buildName");
    
    
        //set buildName to the form
        $form->get('buildName')->setAttribute('value', $buildName);
    
        $request = $this->getRequest();
        if ($request->isPost()) {
            $formValidatorName = "OnlineFieldEvaluation\Form\\" . $buildName . "FormValidator";
            $formValidator = new  $formValidatorName();
            $form->setInputFilter($formValidator->getInputFilter());
    
            $form->setData($request->getPost());
    
            if ($form->isValid()) {
                $this->savetodb($form->getData(), $buildName);
    
                // Redirect to list of forms
                return false;
            } else {
                foreach ($form->getMessages() as $messageId => $message) {
                    echo '<pre>';
                    echo "Validation failure '$messageId':";
                    print_r($message);
                    echo '</pre>';
                }
            }
        }
    
        $view = new ViewModel(array(
            'studEvalId' => $studEvalId,
            'buildName' => $buildName,
            'form' => $form,
        ));
        $view->setTemplate('online-field-evaluation/tabs/edit' . $buildName . '.phtml');
    
        return $view;
    }
    

    2)这个负责ajax调用:

        public function validatepostajaxAction()
        {
    
            $request = $this->getRequest();
            $response = $this->getResponse();
    
            $buildName = $this->params()->fromRoute('buildName', 'unknown');
    
            if ($buildName == 'unknown') {
                $buildName = $this->params()->fromPost('buildName', 'unknown');
    
                if ($buildName == 'unknown') {
                    trigger_error('Could not retrieve build name for ' . $buildName . ' entity for this form!');
                }
            }
    
            //extract parameter from dispatch command
            $studEvalId = (int)$this->params()->fromRoute('studEvalId', 0);
    
            if ($studEvalId == 0) {
                //extract parameter from the form submission
                $studEvalId = (int)$this->params()->fromPost('studEvalId', 0);
                if ($studEvalId == 0) {
    
                    return $this->notFoundAction();
                }
            }
    
            $data = $this->getEntity($buildName, $studEvalId);
            $objectManager = $this->getEntityManager();
    
            $formName = $buildName . "Form";
            $sl = $this->getServiceLocator();
            $form = $sl->get('FormElementManager')->get($formName);
    
            $form->setHydrator(new DoctrineHydrator($objectManager ));
            $entityName = 'OnlineFieldEvaluation\Entity\\' . $buildName;
            $form->setObject(new $entityName());
    
            $form->bind($data);
    
            //set class and Id for buttons like SaveChanges to reference it
            $form->setAttribute('class', "studentFormsClass_$studEvalId");
            $form->setAttribute('id', "studentFormsId_$studEvalId" . "_$buildName");
    
    
            //set buildName to the form
            $form->get('buildName')->setAttribute('value', $buildName);
    
            $messages = array();
            if ($request->isPost()) {
                $formValidatorName = "OnlineFieldEvaluation\Form\\" . $buildName . "FormValidator";
                $formValidator = new  $formValidatorName();
                $form->setInputFilter($formValidator->getInputFilter());
    
                $form->setData($request->getPost());
    
                if (!$form->isValid()) {
                    $errors = $form->getMessages();
                    foreach ($errors as $key => $row) {
    
                        if (!empty($row) && $key != 'submit') {
                            foreach ($row as $keyer => $rower) {
                                //save error(s) per-element that
                                //needed by Javascript
                                $messages[$key][] = $rower;
                            }
                        }
                    }
                }
    
                if (!empty($messages)) {
                    $response->setContent(
                        \Zend\Json\Json::encode(
                            array('status' => 'error',
                                'messages' => (array) $messages,
                                'buildName' => $buildName,
                                'studEvalId' => $studEvalId
    
                            )));
    
                } else {
                    //save to db <span class="wp-smiley wp-emoji wp-emoji-wink" title=";)">;)</span>
                    $this->savetodb($form->getData(), $buildName);
                    $response->setContent(
                        \Zend\Json\Json::encode(
                            array(
                                'status' => 'success',
                                'messages' => 'Successfuly saved.',
                                'buildName' => $buildName,
                                'studEvalId' => $studEvalId
                            )
                        ));
                }
            }
    
            return $response;
        }
    

1 个答案:

答案 0 :(得分:2)

要为元素设置默认值,只需执行以下操作:

  • 打开控制器的动作,呈现所需的视图

  • 实例化表单,按名称获取元素并在其上调用setValue()

如下所示:

public function addAction()
{
     $form = new YourAgencyForm();

     $form->get('agencyName')->setValue('Virtual Field Practicum');
     ....

真的那么简单