Php Zend Form getValues()不';行不通

Php Zend Form getValues()不';行不通,php,forms,zend-framework,Php,Forms,Zend Framework,我正在尝试使用Zend创建简单表单,我需要在大多数情况下使用此表单,因此我创建了默认表单,然后在控制器中使用private函数修改它。但我有两个问题: 表单getValues()不接受文本元素的值 我将render放在表单操作的末尾,但它没有呈现到正确的页面 表单由文本字段和sumbit按钮组成 以下是我的控制器的代码: 这是用于自定义表单的 private function getSearchForm($action = '', $name, $type, $placeholder) {

我正在尝试使用Zend创建简单表单,我需要在大多数情况下使用此表单,因此我创建了默认表单,然后在控制器中使用private函数修改它。但我有两个问题:

  • 表单getValues()不接受文本元素的值
  • 我将render放在表单操作的末尾,但它没有呈现到正确的页面

  • 表单由文本字段和sumbit按钮组成

    以下是我的控制器的代码:

    这是用于自定义表单的

    private function getSearchForm($action = '', $name, $type, $placeholder)
    {
        $urlHelper = $this->_helper->getHelper('url');
        $this->_searchForm = new Application_Form_Admin_Search_Search();
        $this->_searchForm->setName($name);
        $text = $this->_searchForm->getElement('ricerca');
        $text->setLabel('Ricerca '.$type);
        $text->setName($type);
        $text->setAttrib('placeholder', $placeholder);
        $this->_searchForm->setAction($urlHelper->url(array(
            'controller' => 'admin',
            'action' => $action),
            'default'
        ));
        return $this->_searchForm;
    }
    
    这些措施包括:

    public function pneumaticoAction()
    {
        $this->_searchForm = $this->getSearchForm('pneumaticosearch', 'search', 'pneumatico', 'Ricerca per: modello, marchio o codice');
        $this->view->searchForm = $this->_searchForm;
    }
    
    public function pneumaticosearchAction()
    {
        if (!$this->getRequest()->isPost()) {
            $this->_helper->redirector('index', 'public');
        }
        $form=$this->_searchForm;
        if (!$form->isValid($this->getRequest()->getPost())) {
            $this->render('pneumatico');
        }
        $values = $form->getValues();
        $this->view->assign(array(
            "pneumatici" => $this->_modelAdmin->searchPneumatici($values['pneumatico'])
        ));
        $this->render('pneumatico');
    }
    

    第一个问题,当您被路由到
    pneumaticsearch
    操作时,您没有设置
    $this->\u searchForm
    ,但您将其设置为:

    $form=$this->_searchForm;
    
    应该是这样的:

    $form = $this->getSearchForm('pneumaticosearch', 'search', 'pneumatico', 'Ricerca per: modello, marchio o codice');
    
    第二个问题。运行渲染时,类似于将
    $this->view
    参数传递到
    .phtml
    。我看不到您的视图文件,但我想您需要先设置视图:

    $this->view->searchForm = $form
    

    我尝试了您的解决方案,但是$form->getValues()的问题仍然存在。如果我渲染以查看
    $values
    我会得到以下结果:
    数组('ricerca'=>'',)
    。没有文本字段的值。但是如果我渲染
    $\u POST
    我得到这个结果
    数组('pneumatico'=>'something','search'=>'Ricerca',)
    这就是我需要的,那么问题是:表单中每个元素的名称是什么?在你刚才给我们的代码中,似乎有一个元素叫做
    ricerca
    $\u POST
    的键应与表单中的键相同,以便通过
    isValid
    设置表单中的任何值。表单由文本字段和sumbit按钮组成:文本字段名称为
    pneumatico
    ,提交名称为
    search
    ,如您在$\u POST上看到的。我在发布的私有函数上设置的这些名称(
    getSearchForm
    )。我不明白为什么在
    $\u POST
    中我得到了正确的值,而在
    getValues
    中我没有确保它是表单问题。您可以选中
    $form->getElements()
    以获取所有元素。您可以通过
    $form->populate($this->getRequest()->getPost())
    仔细检查它,看看它是否可以解决
    getValues
    问题。我还建议转储
    $this->\u getParams()
    。使用
    $form->getElements
    我可以找到所有元素