Zend framework2 为什么不通过表单提交发送数据(zf2表单和过滤器)?

Zend framework2 为什么不通过表单提交发送数据(zf2表单和过滤器)?,zend-framework2,zend-filter,zend-form2,zend-inputfilter,Zend Framework2,Zend Filter,Zend Form2,Zend Inputfilter,我有问题: 当我填写表单并按下add按钮时,页面被重新加载,但没有数据被添加到数据库中 新闻控制器,添加操作的代码如下: public function addAction() { $form = new AddNewsForm(); $form->get('submit')->setValue('Add1'); $request = $this->getRequest(); if ($request->isPost()) {

我有问题:

当我填写表单并按下add按钮时,页面被重新加载,但没有数据被添加到数据库中

新闻控制器添加操作的代码如下:

public function addAction() {
    $form = new AddNewsForm();
    $form->get('submit')->setValue('Add1');

    $request = $this->getRequest();
    if ($request->isPost()) {
        $form->setData($request->getPost());
        var_dump($form->isValid());
        if ($form->isValid()) {
            echo "form is valid";
            $objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');

            $blogpost = new NewsItem();

            $blogpost->exchangeArray($form->getData());

            $blogpost->setCreated(time());
            $blogpost->setUserId(0);

            $objectManager->persist($blogpost);
            $objectManager->flush();

            // Redirect to list of blogposts
            return $this->redirect()->toRoute('news');
        }
    }
    return array('form' => $form);
}
AddNewsForm
包含为
use\News\Form\AddNewsForm作为AddNewsForm以上

我试着调试代码,发现
$form->isValid()
总是返回false。我试着填写表格的所有字段——上面说表格无效。如果不是所有字段都填写,则也为false

我认为,问题在于验证,因此我将在这里添加如何将assing过滤器添加到表单中。这是我如何将筛选器分配到表单的:

$this->setInputFilter(new AddNewsInputFilter());
AddNewsInputFilter
包含在以下内容中:

use \News\Form\AddNewsInputFilter as AddNewsInputFilter;
我认为在那里粘贴大约100行代码是不好的,因此我将只提供一个指向github repo中文件的链接(此处提供控制器/文件的完整代码):

  • -文件,我在其中创建表单
  • -文件,我设置文件的位置
  • -文件,控制器,我在其中调用创建的表单
  • -我的模块的根目录
所以问题是
$form->isValid()不显示表单是否有效或不正确,我不知道原因。注意,请求得到了正确的处理,并且第一个条件已通过(但第二个条件未通过)。这就是问题所在,这就是我在这里写作的原因

我怎样才能解决它

感谢是前进

在控制器(调用$form->isValid()后)或视图中尝试
var\u dump($form->getMessages())
var\u dump($form->getInputFilter()->>getMessages())
。看看你在巫婆元素上犯了什么错误

注意:
getMessages()
如果尚未调用
$form->isValid()
,则将为空

更新:在控制器中执行此操作:

var_dump($form->isValid());
var_dump($form->getMessages())
var_dump($form->getInputFilter()->getMessages())

在控制器中尝试
$form->getMessages()
$form->getInputFilter()->>getMessages()
(调用
$form->isValid()
后)或查看。看到你在巫婆元素上犯了什么错误了吗?@Exlord我已经试过getMessage了,但没用。什么也看不出来。我将尝试第二种方法,你在评论中提到的,稍后,当它是可能的。我不明白为什么我必须在isValid函数之后使用它。我不能在条件允许的情况下使用它,因为我现在永远不会在那里。您的意思是处于条件中还是之后?
getMessages()
将为空,如果尚未调用
$form->isValid()
,您有一个
var\u转储($form->isValid())getMessages()
放在后面。确定。非常感谢。我稍后再试试。@Exlord,啊!!!我试过了!首先,我将数据设置到表单,然后执行
var_dump($form->isValid())
$form->getMessages()。没有显示任何消息。这里的代码不多,所以我只显示图像: