2012-09-11 120 views
0

我一直在試圖從Zend Framework 2向Album Module添加更多的靈活性。在這個過程中,我一直試圖爲表單字段之一設置一個驗證器,尤其是專輯名稱在我的情況下,我的數據庫中的列名稱是標題。Zend Framework 2 - Doctrine 2錯誤消息

我一直跟着驗證部分從以前的答案,我的帖子之一,它可以發現我一直在使用這個類在我albumcontroller類以這種方式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. 

任何想法我在哪裏犯了一個錯誤?

+0

不要害怕投票 –

回答

0

如果您使用「我的」類並沒有修改該部分,那麼您在查詢中缺少WHERE條件。

在該課程中,參數:value已被綁定,因此您必須在您的查詢中使用此參數(例如WHERE a.title = :value)。

+0

嗨丹尼爾,感謝您指出,但我有一個小問題。它正在檢查現有標題,當發現它只是顯示填充數據的表單時,如何顯示錯誤消息「已經有一個具有此值的實體」。 – 125369

+0

直接在表單的輸入過濾器/驗證器定義中添加驗證器或將其分配給控制器中的表單 –

+0

您可以通過$ form-> getInputFilter() - > get('title') - > getValidatorChain() - >添加($驗證);'。當你調用$ form-> isValid()時,驗證器將被考慮在內。 –