public function __construct($tableName, $entityClass)
 {
     $this->dbAdapter = Registry::getService('Zend\\Db\\Adapter\\Adapter');
     $this->tableName = $tableName;
     $this->tableGateway = new TableGateway($this->tableName, $this->dbAdapter);
     $this->entityClass = $entityClass;
 }
 public function editarAction()
 {
     $id = (int) $this->params()->fromRoute('id');
     if (!$id) {
         return $this->redirect()->toUrl($this->redirect);
     }
     $request = $this->getRequest();
     // Instancia o formuario e seta os elementos
     $form = new $this->form();
     $form->constructElements();
     // Se a requisicao nao for por 'POST' retorna um novo formulario
     if (!$request->isPost()) {
         $repository = Registry::getEntityRepository($this->entityClass);
         /**
          *
          * @todo Deve obrigar o repositorio a ter um metodo chamado findById()
          *       validar para ver se o metodo existe
          *      
          * @todo Verificar se existe uma entidade uma entidade ou retornar
          */
         $entity = $repository->findById($id);
         if (!$entity) {
             $message = "The entity {$this->entityClass} does not have an object with the id {$id}.";
             $this->flashmessenger()->addErrorMessage($message);
             return $this->redirect()->toUrl('/test-center/module/index');
         }
         $form->setData($entity->toArray());
         return new ViewModel(array('nomeController' => $this->nomeController, 'descricaoAction' => $this->descricaoAction, 'form' => $form));
     }
     // Pega o adaptador de banco de dados e inicia o beginTrasaction
     $connection = Registry::getService('Zend\\Db\\Adapter\\Adapter')->getDriver()->getConnection();
     $connection->beginTransaction();
     try {
         // Popula a entidade com o array de dados
         $entity = new $this->entityClass();
         $form->bind($entity);
         $form->setData($request->getPost());
         if (!$form->isValid()) {
             throw new ServiceException($form->getMessages());
         }
         // Instancia o servico e verifica se existe uma pre verificacao a ser executada
         $service = Registry::getEntityService($this->entityClass);
         $service->update($form->getData());
         $connection->commit();
     } catch (ServiceException $exc) {
         $connection->rollback();
         print '<pre>';
         var_dump($exc->getMessage());
         print '</pre>';
         die;
     }
     // Redireciona o usuario
     return new ViewModel(array('nomeController' => $this->nomeController, 'descricaoAction' => $this->descricaoAction, 'form' => $form));
 }