O processo de alteração de registros no banco de dados é sempre o mais burocrático, pois antes de fazer todo o processo de alteração temos de recuperar o registro que queremos alterar. Vamos ver como fazer estes dois processo com usando o Zend Framework 2 e o Doctrine 2.
01 - A rota é o primeiro passo. Temos que criar duas rotas uma para carregar o formulário com os dados vindo do banco de dados (update) e outra para enviar os dados ao banco de dados (edit). Vamos acessar module/Administrador/config/module.config.php.
'adm-edit' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/adm/edit',
'defaults' => array(
'controller' => 'Administrador\Controller\Administrador',
'action' => 'edit',
),
),
),
'carro-update' => array(
'type' => 'Segment',
'options' => array(
'route' => '/adm/update[/:id]',
'constraints' => array(
'id' => '\d+'
),
'defaults' => array(
'controller' => 'Administrador\Controller\Administrador',
'action' => 'update',
),
)
),
02 - Vamos criar os métodos no controller. A classe do controller fica em module/Administrador/src/Administrador/Controller/AdministradorController.php
public function editAction() {
$admService = $this->getServiceLocator()->get('Administrador\Service\AdministradorService');
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost()->toArray();
$up = $admService ->update($data);
if (is_null($up)) {
$this->flashMessenger()->addSuccessMessage('Alterado com sucesso.');
} else {
$this->flashMessenger()->addErrorMessage('Erro ao alterar.');
}
return $this->redirect()->toRoute('adm-home');
}
}
public function updateAction(){
$admService = $this->getServiceLocator()->get('Administrador\Service\AdministradorService');
$admId = $this->params()->fromRoute('id', 0);
$data['form'] = $admService ->popForm($admId);
return new ViewModel($data);
}
03 - Vamos acessar a nossa classe de serviços para criarmos três métodos: um para recuperar os dados do registro do banco de dados, um para popular o formulário com o registro recuperado e o último para efetuar a alteração dos registros. A classe de serviços do módulo está localizada em module/Administrador/src/Administrador/Service/AdministradorService.php
use Carro\Form\CarroForm;
public function getById($adm_id) {
$admRepository = $this->em->getRepository('Administrador\Entity\Administrador');
return $admRepository ->get(array('adm_id' => $adm_id));
}
//populando o formulario (alterar)
public function popForm($id){
$administrador= $this->getById($id);
$array = $this->toArray($administrador);
$form = new AdministardorForm();
$form->populateValues($array);
return $form;
}
public function update(Array $data){
$entity = $this->em->getReference($this->entity, $data['adm_id']);
$obj = $this->toObject($data, $entity);
$this->em->persist($obj);
return $this->em->flush();
}
04 - A nossa classe de repository precisa de mais um método get() onde passamos um array com as condições que queremos fazer a busca (where).
//pegando os registros pelos parametros passados
public function get($where=array()){
return $this->findOneBy($where);
}
05 - O último é acessar module/Administrador/view/administrador/administrador/ e criar o arquivo update.phtml
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('adm-edit'));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formCollection($form);
echo $this->form()->closeTag();
Nenhum comentário:
Postar um comentário