2012-09-11 4 views
0

Я пытаюсь добавить дополнительные возможности для модуля Album из Zend Framework 2. В этом процессе я пытаюсь установить валидатор для одного из полей формы, особенно для названия альбома что в моем случае имя столбца в моей базе данных - это название.Zend Framework 2 - Doctrine 2 Сообщение об ошибке

Я был после части проверки одного из предыдущих ответов на мой пост, который может быть найден here

я использую этот класс в моем классе albumcontroller таким образом:

<?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. 

Любая идея где Im делает ошибку?

+0

Не бойтесь давать голоса –

ответ

0

Если вы используете «мой» класс и не изменили эту часть, в вашем запросе отсутствует условие WHERE.

В классе задан параметр :value, поэтому вы должны использовать этот параметр в своем запросе (например, WHERE a.title = :value).

+0

Привет, Даниил, спасибо, что указали, но у меня небольшая проблема. Он проверяет существующий заголовок, когда он обнаруживает, что он остается, отображает форму с заполненными данными, как может отображаться сообщение об ошибке «Существует уже объект с этим значением». – 125369

+0

Добавьте валидатор непосредственно в определения входных фильтров/валидаторов формы или назначьте его форме в контроллере –

+0

Вы можете сделать последний с помощью '$ form-> getInputFilter() -> get ('title') -> getValidatorChain() - > добавить ($ валидатор) '. Затем валидатор будет учитываться при вызове $ form-> isValid(). –

Смежные вопросы