sexta-feira, 31 de julho de 2015

CRUD no Zend Framework 2 - Delete

A última parte do crud é o delete. Vamos ver como excluir um registro do banco de dados usando o Zend Framework2 e o Doctrine 2.

01 - A rota para acessar o controller deve ser Segment pois iremos passa o id do registro pela url. Vamos acessar module/Administrador/config/module.config.php e adicionar a rota:

'adm-delete' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/administrador/delete[/:id]',
                    'constraints' => array(
                        'id' => '\d+'
                    ),
                    'defaults' => array(
                        'controller' => 'Administrador\Controller\Administrador',
                        'action' => 'delete',
                    ),
                )

            ),

02 - O controller deve conter o método deleteAction para enviar os dados a classe de serviços: A classe AdministradorController está localizada em: module/Administrador/src/Administrador/Controller/

public function deleteAction() {

        //pegando o parâmetro da rota
        $admId = $this->params()->fromRoute('id', 0);

        $admService = $this->getServiceLocator()->get('Administrador\Service\AdministradorService');
        $delete = $admService ->delete($admId);
        if (is_null($delete)) {
            $this->flashMessenger()->addSuccessMessage('Excluído com sucesso.');
        } else {
            $this->flashMessenger()->addErrorMessage('Erro ao excluir.');
        }
        return $this->redirect()->toRoute('adm-home');

    }

03 - A classe de serviço recebe o id do registro recupera os dados do registro no banco de dados e então exclui o mesmo. Em module/Administrador/src/Administrador/Service/ podemos encontrar a classe AdministardorService:

public function delete($id) {
        $entity = $this->em->getReference($this->entity, $id);
        if ($entity) {
            $this->em->remove($entity);
            return $this->em->flush();
        } else {
            return false;
        }

    }

Nenhum comentário:

Postar um comentário