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;
}
}
sexta-feira, 31 de julho de 2015
CRUD no Zend Framework 2 - Update
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();
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();
CRUD no Zend Framework 2 - Select
Vamos utilizar o Repository do Doctrine 2 para recuperar os registros do banco de dados no Zend Framework 2.
Segue abaixo o passo-a-passo:
01 - Vamos adicionar a rota em module/config/module.config.php:
'adm-home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/adm-home',
'defaults' => array(
'controller' => 'Administrador\Controller\Administrador',
'action' => 'select',
),
),
),
02 - No controller iremos criar o método responsável por recebemos os dados da classe de serviços e enviarmos a view. Então acessando module/Administrador/src/Administrador/Controller/AdministradorController.php:
public function selectAction() {
//instanciando a classe de serviços
$admService = $this->getServiceLocator()->get('Administrador\Service\AdministradorService');
//recuperando os registros do banco de dados
$data['administradores'] = $admService ->getAll();
//retornando os dados para a view
return new ViewModel($data);
}
03 - Na classe de serviços do módulo temos que fazer a conexão com o Repository da entidade. A classe está em module/Administrador/src/Administrador/Service:
Vamos adicionar a chamada da classe EntityManager do Doctrine:
use Doctrine\ORM\EntityManager;
Então criar o método para se conectar com o repository e retornar os registros ao controller:
public function getAll() {
$admRepository = $this->em->getRepository('Administrador\Entity\Administrador');
return $admRepository ->get();
}
04 - Vamos acessar o diretório module/Administrador/src/Administrador/Entity para criarmos o método get();
//pegando os registros pelos parâmetros passados
public function get(){
return $this->findAll();
}
05 - Vamos criar o arquivo select.phtml em module/Administrador/view/administrador/administrador/ para exibirmos os registros:
<table class="table table-condensed table-hover table-striped">
<thead>
<tr>
<th>ID</th>
<th>Nome</th>
<th>E-mail</th>
</tr>
</thead>
<tbody>
<?php
foreach ($administradores as $adm) {
echo
"<tr>
<td>{$adm->getAdministradorId()}</td>
<td>{$adm->getAdministradorNome()}</td>
<td>{$adm->getAdministradorEmail()}</td>
</tr>";
}
?>
</tbody>
</table>
Segue abaixo o passo-a-passo:
01 - Vamos adicionar a rota em module/config/module.config.php:
'adm-home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/adm-home',
'defaults' => array(
'controller' => 'Administrador\Controller\Administrador',
'action' => 'select',
),
),
),
02 - No controller iremos criar o método responsável por recebemos os dados da classe de serviços e enviarmos a view. Então acessando module/Administrador/src/Administrador/Controller/AdministradorController.php:
public function selectAction() {
//instanciando a classe de serviços
$admService = $this->getServiceLocator()->get('Administrador\Service\AdministradorService');
//recuperando os registros do banco de dados
$data['administradores'] = $admService ->getAll();
//retornando os dados para a view
return new ViewModel($data);
}
03 - Na classe de serviços do módulo temos que fazer a conexão com o Repository da entidade. A classe está em module/Administrador/src/Administrador/Service:
Vamos adicionar a chamada da classe EntityManager do Doctrine:
use Doctrine\ORM\EntityManager;
Então criar o método para se conectar com o repository e retornar os registros ao controller:
public function getAll() {
$admRepository = $this->em->getRepository('Administrador\Entity\Administrador');
return $admRepository ->get();
}
04 - Vamos acessar o diretório module/Administrador/src/Administrador/Entity para criarmos o método get();
//pegando os registros pelos parâmetros passados
public function get(){
return $this->findAll();
}
05 - Vamos criar o arquivo select.phtml em module/Administrador/view/administrador/administrador/ para exibirmos os registros:
<table class="table table-condensed table-hover table-striped">
<thead>
<tr>
<th>ID</th>
<th>Nome</th>
<th>E-mail</th>
</tr>
</thead>
<tbody>
<?php
foreach ($administradores as $adm) {
echo
"<tr>
<td>{$adm->getAdministradorId()}</td>
<td>{$adm->getAdministradorNome()}</td>
<td>{$adm->getAdministradorEmail()}</td>
</tr>";
}
?>
</tbody>
</table>
CRUD no Zend Framework 2 - Insert
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);
},
)
);
}
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);
},
)
);
}
quinta-feira, 30 de julho de 2015
Repository do Doctrine 2 no Zend Framework2
A classe Repository usanda pelo Doctrine é utilizada para recuperar os registros do banco de dados através da classe EntityRepository.
Para utilizarmos o Reposository primeiro devemos acessar a classe da nossa entidade em:
module/src/Administrador/Entity.
1 - Devemos adicionar a linha para registrarmos a localização da classe do repository.
/**
* Administrador
*
* @ORM\Table(name="administrador")
* @ORM\Entity
* @ORM\Entity(repositoryClass="Administrador\Entity\AdministradorRepository")
*/
2 - No diretório Administrador/Entity/ criamos a classe AdministradorRepository.php
<?php
namespace Administrador\Entity;
use Doctrine\ORM\EntityRepository;
class AdministradorRepository extends EntityRepository {
//pegando os registros pelos parâmetros passados, retornando apenas 1 registro
public function get($where=array()){
return $this->findOneBy($where);
}
//pegando os registros pelos parâmetros passados, retornando N registros
function getWhere($where=array()){
return $this->findBy($where);
}
}
Mais informações:
http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.EntityRepository.html
Para utilizarmos o Reposository primeiro devemos acessar a classe da nossa entidade em:
module/src/Administrador/Entity.
1 - Devemos adicionar a linha para registrarmos a localização da classe do repository.
/**
* Administrador
*
* @ORM\Table(name="administrador")
* @ORM\Entity
* @ORM\Entity(repositoryClass="Administrador\Entity\AdministradorRepository")
*/
2 - No diretório Administrador/Entity/ criamos a classe AdministradorRepository.php
<?php
namespace Administrador\Entity;
use Doctrine\ORM\EntityRepository;
class AdministradorRepository extends EntityRepository {
//pegando os registros pelos parâmetros passados, retornando apenas 1 registro
public function get($where=array()){
return $this->findOneBy($where);
}
//pegando os registros pelos parâmetros passados, retornando N registros
function getWhere($where=array()){
return $this->findBy($where);
}
}
Mais informações:
http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.EntityRepository.html
Entity no Zend Framework 2
A classe Entity é a responsável por encapsular os dados de envio e retorno entre o banco de dados e a aplicação.
Seguem abaixo um exemplo de entidade criada para ser consumida pelo Doctrine:
No diretório module/Administrador/src/Administrador/Entity, criamos a classe Administrador.php.
<?php
namespace Administrador\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Administrador
*
* @ORM\Table(name="administrador")
* @ORM\Entity
*/
class Administrador {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
* @var int
*/
protected $adm_id;
/**
* @ORM\Column(type="text", name="adm_nome_completo")
* @var string
*/
protected $adm_nome;
/**
* @ORM\Column(type="text")
* @var string
*/
protected $adm_email;
/**
* @ORM\Column(type="text", length=32)
* @var string
*/
protected $adm_senha;
/***********getters and setters***********/
public function setAdmId($var) {
$this->adm_id = $var;
}
public function getAdmId() {
return $this->adm_id;
}
public function setAdmNome($var) {
$this->adm_nome = $var;
}
public function getAdmNome() {
return $this->adm_nome;
}
public function setAdmEmail($var) {
$this->adm_email = $var;
}
public function getAdmEmail() {
return $this->adm_email;
}
public function setAdmSenha($var) {
$this->adm_senha = md5($var);
}
public function getAdmSenha() {
return $this->adm_senha;
}
}
Mais Informações:
http://doctrine-orm.readthedocs.org/en/latest/reference/basic-mapping.html
http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html
Seguem abaixo um exemplo de entidade criada para ser consumida pelo Doctrine:
No diretório module/Administrador/src/Administrador/Entity, criamos a classe Administrador.php.
<?php
namespace Administrador\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Administrador
*
* @ORM\Table(name="administrador")
* @ORM\Entity
*/
class Administrador {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
* @var int
*/
protected $adm_id;
/**
* @ORM\Column(type="text", name="adm_nome_completo")
* @var string
*/
protected $adm_nome;
/**
* @ORM\Column(type="text")
* @var string
*/
protected $adm_email;
/**
* @ORM\Column(type="text", length=32)
* @var string
*/
protected $adm_senha;
/***********getters and setters***********/
public function setAdmId($var) {
$this->adm_id = $var;
}
public function getAdmId() {
return $this->adm_id;
}
public function setAdmNome($var) {
$this->adm_nome = $var;
}
public function getAdmNome() {
return $this->adm_nome;
}
public function setAdmEmail($var) {
$this->adm_email = $var;
}
public function getAdmEmail() {
return $this->adm_email;
}
public function setAdmSenha($var) {
$this->adm_senha = md5($var);
}
public function getAdmSenha() {
return $this->adm_senha;
}
}
?>
As informações entre /**/ são chamadas de Annotations, é o modo passar o doctrine algumas informações como: tipo de dado que será encapsulado, o nome da coluna referente no banco de dados, tamanho da coluna no banco de dados e etc
As informações entre /**/ são chamadas de Annotations, é o modo passar o doctrine algumas informações como: tipo de dado que será encapsulado, o nome da coluna referente no banco de dados, tamanho da coluna no banco de dados e etc
Mais Informações:
http://doctrine-orm.readthedocs.org/en/latest/reference/basic-mapping.html
http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html
quinta-feira, 23 de julho de 2015
Instalação do Doctrine2 e Hounddog no Zend Framework 2
O Doctrine 2 é um ORM (Mapeado de Objeto Relacionar), ou seja é a camada de intermediária entre a aplicação e o banco de dados. O Doctrine 2 manipula os objetos PHP para fazer as interações com o banco de dados.
Vamos ver o passa-a-passo de como instalar no Doctrine 2 no Zend Framework 2.
Vamos ver o passa-a-passo de como instalar no Doctrine 2 no Zend Framework 2.
01 - No Composer.json localizado na root do framework.
{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"minimum-stability": "dev",
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.*",
"doctrine/doctrine-module": "dev-master",
"doctrine/doctrine-orm-module": "dev-master",
"hounddog/doctrine-data-fixture-module": "dev-master"
}
}
No Terminal
01 - php composer.phar self-update
02 - php composer.phar install
03 - cd public
04 - php -S localhost:8888
No browser
01 - localhost:8888
No zendframework
01 - Em config/application.config.php
'modules' => array(
'Application',
'DoctrineModule',
'DoctrineORMModule',
'DoctrineDataFixtureModule'
),
Mais informações:
http://www.schoolofnet.com/2013/07/o-que-e-doctrine-2/
quarta-feira, 22 de julho de 2015
Forms no Zend Framework 2
Criar um formulário no Zend Framework 2 é muito simples. Para criar um formulário usando o Zend Framework 2 temos de criar uma classe para gerenciar os elementos. Nós criaremos a classe do formulário dentro da pasta src do módulo.
Existem várias formas de criarmos formulários com o Zend Framework 2, hoje vamos aprender uma dessas formas. Usando como exemplo o módulo Administrador que criamos no post anterior, vamos seguir os passos abaixo:
1 - Acesse o diretório module/Administrador/src/Administrador/Form/.
2 - Crie a classe AdministradorForm.
3 - Quando criamos uma classe a primeira coisa que temos que fazer é definir o namespace. Para nossa classe definimos: namespace Administrador\Form;.
4 - Nossa classe deverá ficar assim:
<?php
namespace Usuario\Form;
use Zend\Form\Form;
use Zend\Form\Element\Hidden;
use Zend\Form\Element\Text;
use Zend\Form\Element\Password;
use Zend\Form\Element\Submit;
class AdministradorForm extends Form{
public function __construct() {
parent::__construct(null);
$this->setAttributes(
array('method' => 'post', 'class' => 'form-horizontal')
);
$id= new Hidden();
$id->setName('adm_id');
$this->add($id);
$nome = new Text();
$nome->setName('adm_nome');
$nome->setLabel('Nome:');
$nome->setAttribute('class', 'form-control');
$this->add($nome);
$email = new Text();
$email->setName('adm_email');
$email->setLabel('E-mail:');
$email->setAttribute('class', 'form-control');
$this->add($email);
$senha = new Password();
$senha->setName('adm_senha');
$senha->setLabel('Senha');
$senha->setAttribute('class', 'form-control');
$this->add($senha);
$submit = new Submit();
$submit->setName('btnLogin');
$submit->setAttribute('class', 'btn btn-success');
$submit->setValue('Entrar');
$this->add($submit);
}
}
?>
5 - Vamos acessar o arquivo index.phtml que está no diretório: module/Administrador/view/administardor/.
6 - Vamos deixar o arquivo da seguinte forma:
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('adm-editar'));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formCollection($form);
echo $this->form()->closeTag();
?>
7 - Agora abra o terminal e vamos acessar a pasta public da nossa aplicação:
cd /var/www/html/meu_zf2/public/
8 - Então vamos iniciar o servidor embutido: php -S localhost:8888
9 - Abra o brower e digite: http://localhost:8888/adm
10 - A tela com o formulário deverá aparecer.
Existem várias formas de criarmos formulários com o Zend Framework 2, hoje vamos aprender uma dessas formas. Usando como exemplo o módulo Administrador que criamos no post anterior, vamos seguir os passos abaixo:
1 - Acesse o diretório module/Administrador/src/Administrador/Form/.
2 - Crie a classe AdministradorForm.
3 - Quando criamos uma classe a primeira coisa que temos que fazer é definir o namespace. Para nossa classe definimos: namespace Administrador\Form;.
4 - Nossa classe deverá ficar assim:
<?php
namespace Usuario\Form;
use Zend\Form\Form;
use Zend\Form\Element\Hidden;
use Zend\Form\Element\Text;
use Zend\Form\Element\Password;
use Zend\Form\Element\Submit;
class AdministradorForm extends Form{
public function __construct() {
parent::__construct(null);
$this->setAttributes(
array('method' => 'post', 'class' => 'form-horizontal')
);
$id= new Hidden();
$id->setName('adm_id');
$this->add($id);
$nome = new Text();
$nome->setName('adm_nome');
$nome->setLabel('Nome:');
$nome->setAttribute('class', 'form-control');
$this->add($nome);
$email = new Text();
$email->setName('adm_email');
$email->setLabel('E-mail:');
$email->setAttribute('class', 'form-control');
$this->add($email);
$senha = new Password();
$senha->setName('adm_senha');
$senha->setLabel('Senha');
$senha->setAttribute('class', 'form-control');
$this->add($senha);
$submit = new Submit();
$submit->setName('btnLogin');
$submit->setAttribute('class', 'btn btn-success');
$submit->setValue('Entrar');
$this->add($submit);
}
}
?>
5 - Vamos acessar o arquivo index.phtml que está no diretório: module/Administrador/view/administardor/.
6 - Vamos deixar o arquivo da seguinte forma:
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('adm-editar'));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formCollection($form);
echo $this->form()->closeTag();
?>
7 - Agora abra o terminal e vamos acessar a pasta public da nossa aplicação:
cd /var/www/html/meu_zf2/public/
8 - Então vamos iniciar o servidor embutido: php -S localhost:8888
9 - Abra o brower e digite: http://localhost:8888/adm
10 - A tela com o formulário deverá aparecer.
segunda-feira, 20 de julho de 2015
Criando um módulo no Zend Framework 2
Já sabemos a estrutura básica de um módulo no zend framework 2 quando utilizamos o Zend Skeleton Application, agora vamos entender o que é um módulo. Mas antes de sabemos que é um módulo é válido lembrar que o zend framework 2 foi totalmente reconstruído e agora trabalha de forma 100% modular, ou seja, cada módulo é independente um do outro isso significa que para cada módulo que criarmos teremos suas configurações próprias. Falando e reaproveitamento, podemos afirmar que podemos sim reaproveitar um módulo para várias aplicações.
O que é um módulo?
Um módulo é uma determinada área da sua aplicação responsável pelas funções de uma entidade especifica, por exemplo: administradores, clientes, fornecedores, usuários. Geralmente teremos para cada tabela do banco de dados um módulo respectivo.
Criando um módulo
Vamos seguir a mesma estrutura do Module Application que é instalado por padrão junto ao Zend Skeleton Application. Vamos criar o module Administrador.
1 - Dentro da pasta module/ crie uma pasta Administrador, este é o nome do nosso módulo.
2 - Entre em module/Administrador. Crie as três pastas: config, src, view.
3 - Vá em module/Application/config e copie o arquivo module.config.php para o pasta do nosso módulo module/Administrador/config.
4 - Agora abra o arquivo module.config.php mude o nome da rota de home para adm e o modo de acesso "route" de "/" para "/adm".
5 - Dentra da pasta src vamos criar uma pasta. Sempre essa pasta deverá ter o nome do nosso módulo. Então vamos criar a pasta Administrador.
6 - Em module/Administrador/src/Administrador vamos criar as seguintes pastas para montarmos a estrutura inicial. Crie as pastas controller, form, service, entity.
7 - Volte ao módulo padrão Application e entre na pasta view. Copie as pastas layout e error para a pasta view do nosso modulo Administrador.
8 - Ainda dentro de module/Administrador/view/ cria a pasta administrador novamente essa pasta deve conter o nome do nosso módulo.
9 - Vamos voltar ao módulo Application e na root podemos encontrar o arquivo Module.php. Vamos copia-lo para a root do nosso módulo Administrador.
10 - Vamos abrir o arquivo Module.php e vamos alterar o namespace de Application para Module.
Colocando pra funciona.
1 - Em module/Administrador/config no arquivo module.config.php vamos deixar nossa rota adm da seguinte forma:
'route' => '/adm',
'defaults' => array(
'controller' => 'Administador\Controller\Administador',
'action' => 'index',
),
2 - Ainda no arquivo module.config.php vamos alterar o indice controller, deixando assim:
'controllers' => array(
'invokables' => array(
'Administador\Controller\Administador' => 'Administador\Controller\Administador',
),
),
3 - Vamos em module/Administrador/src/Administrador/Controller e vamos criar a classe AdministradorController.php
4 - A classe AdministradorController deve ficara assim:
<?php
namespace Administrador\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class AdministradorController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
}
5 - Em module/Administrador/view/administrador vamos criar as pasta administrador e dentro dela o arquivo index.phtml. Vamos entender a estrutura da view: Sempre iremos criar uma pasta com o nome do nosso módulo no caso é administrador, dentro dela vamos criar uma pasta com o nome do nosso controller administrador novamente e a extenção do nosso arquivo sempre deverá ser .phtml e o nome dele é o nome da nossa action indexAction então teremos index.phtml.
6 - Vamos acessar o arquivo application.config.php para registrarmos nosso modulo. Ele não está dentro do nosso módulo mas na pasta config do zend framework.
7 - Agora abra o terminal e vamos acessar a pasta public da nossa aplicação:
cd /var/www/html/meu_zf2/public/
8 - Então vamos iniciar o servidor embutido: php -S localhost:8888
9 - Abra o brower e digite: http://localhost:8888/adm
10 - A tela do zend framework deverá aparecer sem erros.
Mais informações:
http://framework.zend.com/manual/current/en/modules/zend.module-manager.intro.html
http://framework.zend.com/manual/current/en/modules/zend.module-manager.best-practices.html
http://framework.zend.com/manual/current/en/user-guide/modules.html
O que é um módulo?
Um módulo é uma determinada área da sua aplicação responsável pelas funções de uma entidade especifica, por exemplo: administradores, clientes, fornecedores, usuários. Geralmente teremos para cada tabela do banco de dados um módulo respectivo.
Criando um módulo
Vamos seguir a mesma estrutura do Module Application que é instalado por padrão junto ao Zend Skeleton Application. Vamos criar o module Administrador.
1 - Dentro da pasta module/ crie uma pasta Administrador, este é o nome do nosso módulo.
2 - Entre em module/Administrador. Crie as três pastas: config, src, view.
3 - Vá em module/Application/config e copie o arquivo module.config.php para o pasta do nosso módulo module/Administrador/config.
4 - Agora abra o arquivo module.config.php mude o nome da rota de home para adm e o modo de acesso "route" de "/" para "/adm".
5 - Dentra da pasta src vamos criar uma pasta. Sempre essa pasta deverá ter o nome do nosso módulo. Então vamos criar a pasta Administrador.
6 - Em module/Administrador/src/Administrador vamos criar as seguintes pastas para montarmos a estrutura inicial. Crie as pastas controller, form, service, entity.
7 - Volte ao módulo padrão Application e entre na pasta view. Copie as pastas layout e error para a pasta view do nosso modulo Administrador.
8 - Ainda dentro de module/Administrador/view/ cria a pasta administrador novamente essa pasta deve conter o nome do nosso módulo.
9 - Vamos voltar ao módulo Application e na root podemos encontrar o arquivo Module.php. Vamos copia-lo para a root do nosso módulo Administrador.
10 - Vamos abrir o arquivo Module.php e vamos alterar o namespace de Application para Module.
Colocando pra funciona.
1 - Em module/Administrador/config no arquivo module.config.php vamos deixar nossa rota adm da seguinte forma:
'route' => '/adm',
'defaults' => array(
'controller' => 'Administador\Controller\Administador',
'action' => 'index',
),
2 - Ainda no arquivo module.config.php vamos alterar o indice controller, deixando assim:
'controllers' => array(
'invokables' => array(
'Administador\Controller\Administador' => 'Administador\Controller\Administador',
),
),
3 - Vamos em module/Administrador/src/Administrador/Controller e vamos criar a classe AdministradorController.php
4 - A classe AdministradorController deve ficara assim:
<?php
namespace Administrador\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class AdministradorController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
}
5 - Em module/Administrador/view/administrador vamos criar as pasta administrador e dentro dela o arquivo index.phtml. Vamos entender a estrutura da view: Sempre iremos criar uma pasta com o nome do nosso módulo no caso é administrador, dentro dela vamos criar uma pasta com o nome do nosso controller administrador novamente e a extenção do nosso arquivo sempre deverá ser .phtml e o nome dele é o nome da nossa action indexAction então teremos index.phtml.
6 - Vamos acessar o arquivo application.config.php para registrarmos nosso modulo. Ele não está dentro do nosso módulo mas na pasta config do zend framework.
7 - Agora abra o terminal e vamos acessar a pasta public da nossa aplicação:
cd /var/www/html/meu_zf2/public/
8 - Então vamos iniciar o servidor embutido: php -S localhost:8888
9 - Abra o brower e digite: http://localhost:8888/adm
10 - A tela do zend framework deverá aparecer sem erros.
Mais informações:
http://framework.zend.com/manual/current/en/modules/zend.module-manager.intro.html
http://framework.zend.com/manual/current/en/modules/zend.module-manager.best-practices.html
http://framework.zend.com/manual/current/en/user-guide/modules.html
Assinar:
Postagens (Atom)