【问题标题】:Zend Framework 2 - Doctrine 2 Error messageZend Framework 2 - Doctrine 2 错误信息
【发布时间】:2012-09-11 11:43:54
【问题描述】:

我一直在尝试为 Zend Framework 2 中的专辑模块添加更多灵活性。在此过程中,我一直在尝试为其中一个表单字段设置验证器,尤其是专辑名称,在我的例子中,列名在我的数据库是标题。

我一直在关注我帖子先前答案之一的验证部分,可以在here找到

我一直在我的专辑控制器类中以这种方式使用该类:

<?php

namespace Album\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Album\Entity\Album\Album;
use Album\Form\AlbumForm;
use Album\Model\Album\AlbumExists;
use Doctrine\ORM\EntityManager;

class AlbumController
extends AbstractActionController
{
 public function addAction()
     {
        $form = new AlbumForm();
        $form->get('submit')->setAttribute('value', 'Add');

        $query = "SELECT a.title FROM Album\Entity\Album\Album a";
        $albumExists = new AlbumExists($this->getEntityManager(), $query, 'title');

        $request = $this->getRequest();
        if ($request->isPost())
        {
            $album = new Album();
            $form->setInputFilter($album->getInputFilter());
            $form->setData($request->getPost());
            $title = $this->getRequest()->getPost('title');

            if ($form->isValid() && $albumExists->isValid($title))
            {
                 $album->populate($form->getData());
                 $this->getEntityManager()->persist($album);
                 $this->getEntityManager()->flush();

                return $this->redirect()->toRoute('album');
            }
        }
        return array('form' => $form);
    }

当我输入已经在数据库中的专辑名称/标题时,它会以这种方式引发错误:

An error occurred during execution; please try again later.  
Additional information:
Doctrine\ORM\Query\QueryException  

File:
C:\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php:69

Message:
Invalid parameter number: number of bound variables does not match number of tokens.

知道我在哪里犯错了吗?

【问题讨论】:

  • 不要害怕投票

标签: doctrine-orm zend-framework2


【解决方案1】:

如果您使用“我的”类并且没有修改该部分,则您的查询中缺少 WHERE 条件。

在类中,绑定了一个参数:value,所以你必须在查询中使用这个参数(例如WHERE a.title = :value)。

【讨论】:

  • 您好 Daniel,感谢您指出,但我遇到了一个小问题。它正在检查现有的标题,当发现它只是停留显示填充数据的表单,如何显示错误消息“已经存在具有此值的实体。”
  • 直接在表单的 inputfilter/validator 定义中添加验证器或将其分配给控制器中的表单
  • 您可以通过$form-&gt;getInputFilter()-&gt;get('title')-&gt;getValidatorChain()-&gt;add($validator); 完成后者。当您调用 $form->isValid() 时,验证器将被考虑在内。
  • 好吧,我编辑了我的评论,但你也可以在我在上一个问题中给你的文档中找到大量信息 -> zf2.readthedocs.org/en/latest/index.html#zend-form 这些是我用来学习它的文档.
  • 知道为什么我会收到这个致命错误消息Fatal error: Call to undefined method Zend\Validator\ValidatorChain::add() in C:\Album\src\Album\Controller\AlbumController.php,当我试图将验证器分配给我的 AlbumController 中的表单时,就像这样 $form-&gt;getInputFilter()-&gt;get('title')-&gt;getValidatorChain()-&gt;add($albumExists);
猜你喜欢
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2011-12-17
相关资源
最近更新 更多