Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
FORÇA A ARMA
DE MAIS
VONTADE PODEROSA
... DO
UNIVERSO
...
...É INÚTIL
Criando uma aplicação MVC em
5
com Zend Framework 1.0.1
Palestrante:
Instrutor: Flávio Gomes da Silva Lisboa
AVISO: Os exemplos de código
neste treinamento são baseados
em um sistema fictício. As
referências na documentação ao
SERPRO são apenas
exemplificativas e não
constituem de modo algum
extração de código de sistemas
Palestrante:
do SERPRO.
Instrutor: Flávio Gomes da Silva Lisboa CETEC/CTSSP/CTDSP
Versões do PHP:
➔ PHP/FI (1995) Rasmus Lerdorf cria a linguagem.
Sexto dia: ?
Sétimo dia: ?
Oitavo dia: ?
Nono dia: ?
Décimo dia: Conclusão
Primeiro dia
+ Apache 2.2.4
+ MySQL 5.0.45 O projeto será
+ PHP 5.2.3 + PHP 4.4.7 em PHP 5
+ phpMyAdmin 2.10.3
➔ PostgreSQL 8.2.4
➔ PhpPgAdmin 4.1.3
➔ EasyEclipse for PHP 1.2.1.1
➔ Smarty Engine Template 2.6.18
➔ Zend Framework 1.0.1
Os guias de instalação
encontram-se na parte
de anexos da apostila
“Ambiente para o Zend
Framework”
Para pará-lo:
/opt/lampp/lampp stop
postgres -D /usr/local/postgres/data
Ou com o comando:
pg_ctl start
Para pará-lo:
pg_ctl stop
É só clicar no
ícone, no
Desktop, iac,
iac!
Grandes poderes
trazem grandes
responsabilidades...
Página principal
Logomarca da loja
Acessar Cadastre-se
Busca produtos:
Logomarca do desenvolvedor
RewriteRule .* /acme/index.php
Esses diretórios
representam o
MVC no Zend
Framework
MVC?
Pelas balbas do
plofeta, o que é
isso?!
Calma,
velhinho! Você
vai entender
quando a gente
terminar!
RewriteEngine on
RewriteRule .* index.php
php_flag magic_quotes_gpc off
php_flag register_globals off
RewriteEngine off
<?php
/**
* Arquivo principal da aplicação
* Define todos os caminhos onde os arquivos estão
armazenados,
* todos os includes necessários e todos os componentes
que a
* aplicação utilizará.
* Responsável por inicializar a aplicação, ele invoca os
* arquivos de controlador que são responsáveis pelo
funcionamento
* da aplicação.
LEGIBILIDADE
* @filesource
* @author Flávio Lisboa
* @copyright Copyright 2007 SERPRO
* @package zendframework
* @subpackage zendframework.acme
* @version 1.0
*/
/* Configura as mensagens de erro que devem ser
apresentadas. */
error_reporting(E_ALL | E_STRICT);
/*
* Configura o caminho a ser procurado em todos os
includes.
* Irá procurar no diretório ../library, no
application/models
* e no caminho original do PHP.
*/
/**
* É interessante utilizar set_include_path para definir
onde se encontram
* todos os arquivos do projeto, pois assim se evita que
o mesmo código
* seja escrito várias vezes, gerando menos linhas e
facilitando qualquer
* alteração de path.
*/
$path = ':/opt/lampp/htdocs/zend/library';
$path .= ':/opt/lampp/htdocs/zend/acme/application/models';
set_include_path(get_include_path().$path);
/*
* Faz o include do componente Zend_Loader.
* Este include é obrigatório.
* Zend_Loader carrega arquivos, classes e recursos
* dinamicamente em sua aplicação PHP.
* => suporta autocarregamento da SPL (Standard PHP Library)
* => suporta include_path
* => fornece mecanismo de falha baseado em exceção
*/
include('Zend/Loader.php');
/*
* O registro é um contâiner para armazenar objetos e valores
* no espaço da aplicação. Armazenar um objeto ou valor
* no registro torna o mesmo sempre disponível ao longo
* da aplicação durante o tempo de vida da requisição.
* Este mecanismo é freqüentemente uma alternativa aceitável
* ao uso de variáveis globais.
* => fornece armazenamento acessível globalmente para objetos
* e valores
* => fornece os padrões iterator, array e indexed access
*/
Zend_Loader::loadClass('Zend_Registry');
/**
* Este método tenta carregar o arquivo passado como
parâmetro procurando no path
* definido com a função set_include_path. Caso ele não
consiga encontrar o arquivo,
* é gerada uma exceção que indica arquivo inexistente ou
sem acesso. O método
* considera os underscores no nome do arquivo como
subdiretórios. Por exemplo, o
* comando Zend::loadClass('Zend_Controller_Front') faz a
importação do arquivo
* ../zendframework/library/Zend/Controller/Front.php.
Seguir esse padrão facilita
* o entendimento da estrutura do projeto.
*/
Zend_Loader::loadClass('Zend_Controller_Front'); /*
Classe de controladores */
Zend_Loader::loadClass('Zend_View'); /* Classe
das visões */
Zend_Loader::loadClass('Zend_Config_Ini'); /* Classe
usada para configurações */
Zend_Loader::loadClass('Zend_Db'); /* Classe
para acesso a base de dados */
Zend_Loader::loadClass('Zend_Db_Table'); /* Classe
para usar as tabelas como objetos */
Zend_Loader::loadClass('Zend_Filter_Input'); /*
Classe usada para filtrar os dados */
$view->setBasePath('./application/views'); /* Define o
diretório onde estarão as visões */
Zend_Registry::set('view', $view); /* Registra
na memória a variável view que indica a visão */
/* Registra a variável db */
Zend_Registry::set('db', $db);
Usuarios.php
<?php
/**
* Modelo da classe Usuarios
* @filesource
* @author Flávio Lisboa
* @copyright Copyright 2007 SERPRO
* @package zendframework
* @subpackage zendframework.acme.application.models
* @version 1.0
*/
class Usuarios extends Zend_Db_Table
{
protected $_name = 'usuarios';
}
?>
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando a página inicial
Produtos.php
<?php
/**
* Modelo da classe Produtos
* @filesource
* @author Flávio Lisboa
* @copyright Copyright 2007 SERPRO
* @package zendframework
* @subpackage zendframework.acme.application.models
* @version 1.0
*/
class Produtos extends Zend_Db_Table
{
protected $_name = 'produtos';
}
?>
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando a página inicial
Itens.php
<?php
/**
* Modelo da classe Itens
* @filesource
* @author Flávio Lisboa
* @copyright Copyright 2007 SERPRO
* @package zendframework
* @subpackage zendframework.acme.application.models
* @version 1.0
*/
class Itens extends Zend_Db_Table
{
protected $_name = 'itens';
}
?>
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando a página inicial
Pedidos.php
<?php
/**
* Modelo da classe Pedidos
* @filesource
* @author Flávio Lisboa
* @copyright Copyright 2007 SERPRO
* @package zendframework
* @subpackage zendframework.acme.application.models
* @version 1.0
*/
class Pedidos extends Zend_Db_Table
{
protected $_name = 'pedidos';
}
?>
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando a página inicial
Grave a tabela.
[database]
db.adapter = PDO_PGSQL
db.config.host = localhost
db.config.username = acme
db.config.password = 123456
db.config.dbname = acme
<?php
/**
* Controlador principal
* @filesource
* @author Flávio Lisboa
* @copyright Copyright 2007 SERPRO
* @package zendframework
* @subpackage
zendframework.acme.application.controllers
* @version 1.0
*/
/**
* Método que mostra a página inicial
*
* @return void
*/
public function indexAction()
{
$view = Zend_Registry::get('view');
$view->assign('header','pageHeader.phtml');
$view->assign('body','index.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view->render('default.phtml'));
}
}
?>
#header{
background-color:green;
border:1px solid black;
Width:100%
}
#logomarca_customer{
background-color: green;
color:white;
font-family:Verdana;
font-size: xx-large;
font-weight:bold;
text-align:center;
}
#menu {
background-color: yellow;
border:1px solid black;
color:darkblue;
font-family:Verdana;
font-size: medium;
font-weight:bold;
text-align:center;
width:100%
}
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando a página inicial
O código do identificador CSS footer ficará assim:
#footer{
background-color:blue;
border:1px solid black;
width:100%;
}
#logomarca_maker{
background-color: blue;
color: white;
font-family: Verdana;
font-size: xx-large;
font-weight: bold;
text-align: center;
}
#sample {
background-color: deepskyblue;
border: 1px solid black;
width: 100%;
}
#product_box {
border: 1px;
border-style: solid;
font-size: large;
font-weight: bold;
text-align: left;
}
#buy_button {
background-color: red;
border: 1px solid black;
color: yellow;
font-family: Arial;
font-weight: bold;
}
<div id="header">
<h1 id="logomarca_customer">Lojas Acme</h1>
</div>
<div id="menu">
<form action="zend/acme/buscas" method="post">
<a href="/zend/acme/index/acessar" >Acessar</a>
<a href="zend/acme/cadastrar" >Cadastrar</a>
<label>Busca produtos:</label>
<input name="nome" value="" id="nome" type="text">
<input type="submit" value="Pesquisar" />
</form>
</div>
<div id="footer">
<div id="logomarca_maker">
Corporação NF
</div>
</div>
<table id="sample">
<?php
$counter = 1;
foreach ($this->produtos as $produto)
{
if ($counter % 2 != 0)
{
echo $counter == 1 ? '<tr>' : '</tr><tr>';
}
?>
<td id="product_box">
<?=$this->escape($produto['nome'])?><br/>
<?=$this->escape($produto['valor'])?><br/>
<?=$this->escape('Quantidade disponível: ')?>
<?=$this->escape($produto['quantidade'])?><br/>
</td>
<?php
$counter++;
}
?>
</table>
<a href="./carrinho/comprar">Comprar</a>
TUDO ISSO SÓ
PRA APARECER
ESSA PÁGINA?
Calma, vamos
explicar tudo o
que foi feito!
requisição
CONTROLADOR
usuário
CONTROLADOR MODELO
CONTROLADOR VISÃO
usuário
http://localhost/zend/acme
indexController.php
Você
indexController.php Produtos.php
indexController.php default.phtml
você
Logomarca da loja
Acessar Cadastre-se
Busca produtos:
Logomarca do desenvolvedor
<?php
/**
* Controlador do carrinho de compras
* @filesource
* @author Flávio Lisboa
* @copyright Copyright 2007 SERPRO
* @package zendframework
* @subpackage
zendframework.acme.application.controllers
* @version 1.0
*/
if (!isset($_SESSION['carrinho']))
{
$_SESSION['carrinho'] = array();
}
$carrinho = $_SESSION['carrinho'];
if (!is_null($this->_request->getParam('id')))
{
$id = (int)$this->_request->getParam('id');
$incluido = FALSE;
if (!$incluido)
{
$produtos = new Produtos();
$item = $produtos->find($id)->toArray();
$item[0]['quantidade']= 1;
$carrinho[] = $item[0];
$_SESSION['carrinho'] = $carrinho;
}
}
$view = Zend_Registry::get('view');
$view->assign('mensagem',$mensagem);
$view->assign('itens',$carrinho);
$view->assign('header','pageHeader.phtml');
$view->assign('body','comprar.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
<h3 id="warning"><?=$this->mensagem?></h3>
<table id="carrinho">
<thead>
<?php
$titulos = array('Código',
'Nome',
'Quantidade',
'Preço Unitário',
'Total',
'Editar',
'Excluir');
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando o carrinho de compras
$valorTotal = (float)$quantidade *
(float)$moeda;
$totalItem = $this-
>escape(money_format('%.2n',$valorTotal));
$editar = '<a
href="./editar?id='.$codigo.'">E</a>';
$excluir= '<a
href="./excluir?id='.$codigo.'">X</a>';
$somaTotal += $valorTotal;
$colunas = array($codigo,
$nome,
$quantidade,
$preco,
$totalItem,
$editar,
$excluir);
echo '<tr>';
echo '</tr>';
}
?>
</table>
Total da compra:
<?='R$'.money_format('%.2n',$somaTotal)?><br/>
<a href="/zend/acme">Continuar comprando</a>
<a href="/zend/acme/carrinho/fechar">Fechar
compra</a>
#warning {
color : red;
}
<a id="buy_button"
href="./carrinho/comprar?id=<?=$produto['id']?>"
>Comprar</a>
$id = (int)$this->_request->getParam('id');
if (is_null($id))
{
$this->_redirect('/carrinho/');
exit;
}
$this->_redirect('/carrinho/');
}
if (is_null($id))
{
$this->_redirect('/carrinho/');
exit;
}
$produtoSelecionado = array();
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando o carrinho de compras
$view = Zend_Registry::get('view');
$view-
>assign('produtoSelecionado',$produtoSelecionado);
$view->assign('header','pageHeader.phtml');
$view->assign('body','editar.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
<center>
<form action="/zend/acme/carrinho/alterar"
method="post">
<?php
if (isset($this->produtoSelecionado['id']))
{
echo '<b>Produto: '.$this-
>produtoSelecionado['nome'].'</b><br/>';
echo '<b>Preço: '.$this-
>produtoSelecionado['valor'].'</b><br/>';
?>
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando o carrinho de compras
Quantidade:
<input name="quantidade" value="<?=$this-
>produtoSelecionado['quantidade']?>" id="nome"
type="text">
<input name="id" value="<?=$this-
>produtoSelecionado['id']?>" id="id"
type="hidden">
<?php
}
?>
<input type="submit" name="alterar"
value="Alterar"/>
</form>
</center>
<a href="/zend/acme/carrinho/">Carrinho de
compras</a>
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando o carrinho de compras
if (is_null($id))
{
$this->_redirect('/carrinho/');
exit;
}
$this->_redirect('/carrinho/');
}
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Criando o carrinho de compras
<a href="/zend/acme/carrinho/fechar">Fechar
compra</a>
/* Fechamento da compra */
public function fecharAction()
{
if (!isset($_SESSION['cliente']))
{
$this->_redirect('/index/acessar');
exit;
}
}
$view = Zend_Registry::get('view');
$view-
>assign('header','pageHeader.phtml');
$view->assign('body','fechar.phtml');
$view-
>assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
➔email: text
➔senha: text
para
/* Identificação do cliente */
public function acessarAction()
{
if (isset($_SESSION['cliente']))
{
$this->_redirect('/carrinho/comprar');
}
}
$view = Zend_Registry::get('view');
$view-
>assign('mensagem',isset($_SESSION['mensagem'])
? $_SESSION['mensagem'] : '');
$view-
>assign('header','pageHeader.phtml');
$view->assign('body','acessar.phtml');
$view-
>assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
<h3 id="warning"><?=$this->mensagem?></h3>
<center>
<form action="/zend/acme/index/login" method="post">
CPF:
<input name="cpf" value="" id="cpf" type="text">
e-mail:
<input name="email" value="" id="email" type="text">
senha:
<input name="senha" value="" id="senha" type="password">
<input type="submit" name="login" value="Login"/>
</form>
</center>
<a href="/zend/acme/carrinho">Carrrinho de compras</a>
$where = $table->getAdapter()-
>quoteInto("$campo = ?", $cpf);
$usuario = $table->fetchAll($where)->toArray();
/* Cadastramento do cliente */
public function cadastrarAction()
{
$view = Zend_Registry::get('view');
$view-
>assign('mensagem',isset($_SESSION['mensagem'])
? $_SESSION['mensagem'] : '');
$cpfExiste = !empty($usuario);
$where = $table->getAdapter()-
>quoteInto('email = ?', $email);
$usuario = $table->fetchAll($where)-
>toArray();
$emailExiste = !empty($usuario);
$dados =
array('cpf'=>$cpf,'email'=>$email,'senha'=>$se
nha);
$table->insert($dados);
$this->_redirect('/index/acessar');
}
if (!isset($_SESSION['cliente']))
{ $cpf = ''; }
else
{
$cliente = $_SESSION['cliente'];
$cpf = $cliente['cpf'];
}
<?php
if ($cpf=='')
{
?>
<a href="/zend/acme/index/acessar" >Acessar</a>
<a href="/zend/acme/index/cadastrar" >Cadastrar</a>
<?php
}
else
{
?>
<a href="/zend/acme/index/logout" >Sair</a>
<?php
}
?>
$this->_redirect('/');
}
<center>
<form action="/zend/acme/carrinho/gravarCompra"
method="post">
<h2>Forma de pagamento:</h2>
<?=$this->escape('Boleto Bancário')?>
<input name="formaPagamento" value="boleto"
id="formaPagamento" type="radio"/>
<?=$this->escape('Cartão de Crédito')?>
<input name="formaPagamento" value="cartao"
id="formaPagamento" type="radio"/>
<input type="submit" name="gravar" value="Gravar"/>
</form>
</center>
<a href="/zend/acme/carrinho">Carrinho de compras</a>
➔produto_id: integer
➔valor: money
➔quantidade: integer
$formasPagamento = array('boleto'=>'Boleto
Bancário','cartao'=>'Cartão de Crédito');
$codigo = mt_rand(10000,99999);
$idPedido = $pedido-
>insert(array('codigo'=>$codigo));
$itens = $_SESSION['carrinho'];
unset($_SESSION['carrinho']);
$view = Zend_Registry::get('view');
$view->assign('mensagem',$mensagem);
$view-
>assign('header','pageHeader.phtml');
$view-
>assign('body','gravarCompra.phtml');
$view-
>assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
<h3 id="warning"><?=$this->mensagem?></h3>
<a href="/zend/acme/">Página inicial</a>
$view = Zend_Registry::get('view');
$view->assign('produtos',$produtos-
>toArray());
$view->assign('header','pageHeader.phtml');
$view->assign('body','index.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
}
<h2 id="warning"><?=$this->mensagem?></h2>
<center>
<form action="/zend/acme/estoque/login"
method="post">
CPF:
<input name="cpf" value="" id="cpf" type="text">
senha:
<input name="senha" value="" id="senha"
type="password">
<input type="submit" name="login" value="Login"/>
</form>
</center>
<div id="header">
<h1 id="logomarca_customer">Lojas Acme</h1>
</div>
$view-
>assign('mensagem',isset($_SESSION['mensagem']) ?
$_SESSION['mensagem'] : '');
$_SESSION['mensagem'] = '';
$view->assign('header','estoqueHeader.phtml');
$view->assign('body','estoqueLogin.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Controlando o Estoque
O método login que responde ao formulário de login será este:
if ($cpf)
{
$where = $table->getAdapter()->quoteInto('cpf
= ?', $cpf);
$usuario = $table->fetchAll($where)->toArray();
}
else
{ $usuario = NULL; }
$view->assign('mensagem',isset($_SESSION['mensagem']) ?
$_SESSION['mensagem'] : '');
$_SESSION['mensagem'] = '';
$view->assign('cpf',$cpf);
$view->assign('itens',$itens->toArray());
$view->assign('header','estoqueHeader.phtml');
$view->assign('body','manterProduto.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view->render('default.phtml'));
}
<h2 id="warning"><?=$this->mensagem?></h2>
<h2>Estoquista: <?=$this->cpf?></h2>
<table id="inventario">
<thead>
<?php
$titulos = array('Código',
'Nome',
'Quantidade',
'Preço Unitário',
'Dar entrada',
'Dar baixa',
'Excluir');
foreach ($titulos as $titulo)
{
echo '<th>'.$this->escape($titulo).'</th>';
}
?>
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Controlando o Estoque
</thead>
<?php
$somaTotal = 0;
echo '</tr>';
}
?>
</table>
<a href="/zend/acme/estoque/logout">Sair</a>
$produtoSelecionado = $table-
>find($id)->toArray();
return $produtoSelecionado[0];
}
$view = Zend_Registry::get('view');
$view-
>assign('produtoSelecionado',$produtoSelecionado);
$view->assign('header','estoqueHeader.phtml');
$view->assign('body','entrada.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
<center>
<form action="/zend/acme/estoque/adicionar"
method="post">
<?php
if (isset($this->produtoSelecionado['id']))
{
echo '<b>Produto: '.$this->escape($this-
>produtoSelecionado['nome']).'</b><br/>';
echo '<b>'.$this->escape('Preço: ').$this-
>produtoSelecionado['valor'].'</b><br/>';
echo '<b>'.$this->escape('Posição de estoque:
').$this-
>produtoSelecionado['quantidade'].'</b><br/>';
}
?>
Quantidade:
<input name="quantidade" value=""
id="quantidade" type="text">
<input name="id" value="<?=$this-
>produtoSelecionado['id']?>" id="id"
type="hidden">
<input type="submit" name="darentrada"
value="Dar entrada"/>
</form>
</center>
<a
href="/zend/acme/estoque/manterProduto">Inventá
rio</a>
<center>
<form action="/zend/acme/estoque/subtrair"
method="post">
<?php
if (isset($this->produtoSelecionado['id']))
{
echo '<b>Produto: '.$this->escape($this-
>produtoSelecionado['nome']).'</b><br/>';
echo '<b>'.$this->escape('Preço: ').$this-
>produtoSelecionado['valor'].'</b><br/>';
echo '<b>'.$this->escape('Posição de estoque:
').$this-
>produtoSelecionado['quantidade'].'</b><br/>';
}
?>
$produto = $table->find($id)->toArray();
$quantidade = $quantidade +
$produto[0]['quantidade'];
$where = $table->getAdapter()->quoteInto('id = ?
', $id);
$table->update($dados, $where);
}
$this->_redirect('/estoque/manterproduto');
}
$produto = $table->find($id)->toArray();
$quantidade = $produto[0]['quantidade'] -
$quantidade;
$where = $table->getAdapter()->quoteInto('id = ?
', $id);
$table->update($dados, $where);
}
$this->_redirect('/estoque/manterproduto');
}
$table->update($dados, $where);
}
$this->_redirect('/estoque/manterproduto');
}
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Método alterarPreco
/* Gravação de um novo preco */
public function alterarPrecoAction()
{
$id = (int)$this->_request->getParam('id');
if (!is_null($id))
{
$nome = (string)$this->_request->getParam('preco');
$table->update($dados, $where);
}
$this->_redirect('/estoque/manterproduto');
}
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Controlando o Estoque
/* Exclusão do produto */
public function excluirAction()
{
$id = (int)$this->_request->getParam('id');
if (!is_null($id))
{
$table = new Itens();
$where = $table->getAdapter()-
>quoteInto('produto_id = ?', $id);
$pedidos = $table->fetchAll($where)-
>toArray();
if (empty($pedidos))
{
$table = NULL;
$table = new Produtos();
$where = $table->getAdapter()-
>quoteInto('id = ?', $id);
$table->delete($where);
}
else
{
$_SESSION['mensagem'] = 'produto
consta em pedido';
}
}
$this->_redirect('/estoque/manterproduto');
}
FLÁVIO GOMES DA SILVA LISBOA www.fgsl.eti.br
Treinamento em PHP 5 módulo II
Controlando o Estoque
Para renderizar a tela de inclusão de novos produtos,
precisamos criar um método com o nome incluir:
/* Inclusão de produto */
public function incluirAction()
{
$view = Zend_Registry::get('view');
$view->assign('header','estoqueHeader.phtml');
$view->assign('body','incluir.phtml');
$view->assign('footer','pageFooter.phtml');
$this->_response->setBody($view-
>render('default.phtml'));
}
<center>
<form
action="/zend/acme/estoque/incluirProduto"
method="post">
Nome:
<input name="nome" value="" id="nome"
type="text">
<input type="submit" name="incluir"
value="Incluir"/>
</form>
</center>
<a
href="/zend/acme/estoque/manterProduto">Inven
tário</a>
$table->insert($dados);
}
else
{
$_SESSION['mensagem'] = 'nome inválido';
}
$this->_redirect('/estoque/manterProduto');
}
Dúvidas? Se houverem...
Até a próxima!