Vamos começar a fazer um crud (inserir, selecionar, alterar e excluir registros do banco de dados) com zend framework 2 utilizando o doctrine 2.
Vamos seguir os passos abaixo para aprendermos como cadastrar um registro no banco de dados:
01 - Registrar a rota na action do formulário que deverá chamar o controller e action para o cadastro.
Então vamos abrir nosso arquivo .phtml localizado em module/Administrador/view/administrador/administrador/index/index.phtml, deixando a action assim:
$form->setAttribute('action', $this->url('adm-insert'));
02 - Em module/Administrador/config/module.config.php, vamos adicionar uma nova rota do tipo literal:
'adm-insert' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/adm-insert',
'defaults' => array(
'controller' => 'Administrador\Controller\Administrador',
'action' => 'insert',
),
),
),
03 - O nosso controller deverá conter a action responsável por instanciar o serviceManager e enviar os dados vindo do formulário ao service para então serem inseridos no banco de dados.
Vamos acessar o diretório module/Administrador/src/Administrador/Controller/AdministradorController.php
public function insertAction() {
//verificando se a requisão é via POST
if ($this->getRequest()->isPost()) {
//convertendo dados recebido via POST em array
$data = $this->getRequest()->getPost()->toArray();
//localizando o service manager do módulo
$serviceAdm = $this->getServiceLocator()->get('Administrador\Service\AdministradorService');
//chamando o método responsavel pela inserção e verificando se não retorna nulo
if (is_null($serviceAdm->insert($data))) {
//caso volte nulo (cadastro realizado com sucesso) gera uma mensagem
$this->flashMessenger()->addSuccessMessage('Cadastrado com sucesso.');
} else {
//caso não volte nulo (erro ao cadastrar) gera uma mensagem de erro
$this->flashMessenger()->addErrorMessage('Erro ao cadastrar.');
}
//redirecionando para a página inicial
return $this->redirect()->toRoute('adm-home');
}
}
04 - Devemos criar a classe service e já declarar o método responsavel por tratar e incluir os registros no banco de dados. Nossa classe AdministradorService deverá ser criada em module/Administrador/src/Administrador/Service/ e deverá ficar da seguinte forma:
<?php
namespace Administrador\Service;
use Doctrine\ORM\EntityManager;
use Administrador\Entity\Administradoras AdministradorEntity;
use Zend\Stdlib\Hydrator;
class AdministradorService {
private $em;
private $entity = 'Administrador\Entity\Administrador';
public function __construct(EntityManager $em) {
$this->em = $em;
}
public function insert(Array $data = array()) {
$entity = new AdministradorEntity();
//o doctrine espera receber um objeto para inserir-lo no banco de dados
//então criamos um método para converter um array em objeto
$obj = $this->toObject($data, $entity);
$this->em->persist($obj);
return $this->em->flush();
}
private function toObject(Array $data, $entity) {
return (new Hydrator\ClassMethods())->hydrate($data, $entity);
}
}
05 - Devemos registrar nosso serviço no arquivo Module.php localizado na root do nosso Modulo.
O primeiro passo é chamar a classe de serviço :
use Administrador\Service\AdministradorService;
Agora podemos declara o método getServiceConfig:
public function getServiceConfig() {
return array(
'factories' => array(
'Administrador\Service\AdministradorService' => function($sm) {
$em = $sm->get('Doctrine\ORM\EntityManager');
return new AdministradorService($em);
},
)
);
}
Nenhum comentário:
Postar um comentário