Posts Tagged Zend Framework
Workshop Online de Zend Framework – School of Net: 31/07/2010
Posted by Thiago Colares in Eventos, Zend Framework on July 1, 2010
Zend Framework Tutorial Series (por Adler Medrado)
Posted by Thiago Colares in PHP, Zend Framework on January 20, 2010
Programar em PHP profissionalmente sem um framework decente é impráticavel. Em 2008 comecei a estudar (na teoria) o Zend Framework e em 2009 participei pela primeira vez em um projeto de grande porte utilizando o ZF. Hoje indico o ZF a todos que estiverem procurando um framework completo e descomplicado.
Estava pensando em escrever um tutorial básico sobre o ZF, mas ao acessar o blog do Adler Medrado hoje ví que ele está preparando uma série de tutoriais semanais sobre o ZF, do básico ao avançado. Não vou escrever um tutorial só pra ter o meu nome nele. Aproveitem e se deliciem com essa série que tenho certeza que vai ser ótima!
Parabéns ao Adler pela iniciativa! Vou atualizando o post à medida que forem saindo os outros capítulos…
Zend Framework Tutorial Series – Capítulo 1
Zend Framework Tutorial Series – Capítulo 2
Autenticação com Zend_Auth
Posted by Thiago Colares in PHP, Zend Framework on November 10, 2009
Falar em Zend Framework sem citar o Zend_Auth é impossível. Afinal, qual sistema não possui autenticação de usuários? Nesse post darei um exemplo prático do uso do Zend Auth.
É importante lembrar a diferença entre o Zend_Auth e o Zend_Acl, pois apesar deles se complementarem, tem funções totalmente diferenes. O Zend_Auth é responsável somente pela autenticação, e o Zend_Acl é responsável por mapeamento de permissões do sistema. Falaremos do Zend_Acl em outra oportunidade.
Inicialmente, temos a configuração inicial no bootstrap:
-
-
//Criando um objeto Registry para utilização posterior
-
$registry = Zend_Registry::getInstance();
-
-
//Determinando a conexão através de um arquivo INI (ou qualquer outra forma à sua escolha)
-
$configDb = new Zend_Config_Ini('./application/config/db.ini', 'identificador') ;
-
$db = Zend_Db::factory ( $configDb->db->adapter, $configDb->db->config->toArray() ) ;
-
-
//Setando no registro a conexão criada
-
$registry->set( 'dbSistema', $db ) ;
-
-
//Definição do Zend_Auth
-
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
-
$registry->set( 'authAdapter', $authAdapter ) ;
Não vamos entrar na questão do formulário, vamos direto para a action do controller, onde só chamaremos uma função do model e verificaremos o seu retorno:
-
-
$login = new User();
-
$result = $login->login($_POST);
-
-
if($result){
-
//Usuário autenticado
-
} else {
-
//Autenticação inválida
-
}
Agora a parte mais importante, a função da model:
-
public function login($objPost){
-
//Recuperando o objeto que registramos no bootstrap
-
$authAdapter = Zend_Registry::get('authAdapter');
-
//Setando a tabela e as colunas de identificação do usuário no banco
-
$authAdapter
-
->setTableName('USUARIO')
-
->setIdentityColumn('LOGIN')
-
->setCredentialColumn('SENHA');
-
-
//Recebendo os dados do POST
-
$authAdapter
-
->setIdentity(strtolower($objPost['input_usuario']))
-
->setCredential(md5($objPost['input_senha']));
-
-
//Autenticação
-
$result = $authAdapter->authenticate();
-
-
//Verificando a autenticação…
-
if($result->isValid()){
-
-
return true;
-
}
-
else{
-
return false;
-
}
-
}
Simples, não? Espero ter ajudado… Um abraço a todos!
Documentação oficial do Zend_Auth: http://framework.zend.com/manual/en/zend.auth.html
Implementação de cache automático com Zend_Cache
Posted by Thiago Colares in PHP, Zend Framework on September 21, 2009
Trabalhando em uma estrutura Zend Framework a alguns meses atrás, tivemos a necessidade de um sistema de cache automático para a grande maioria das consultas de um sistema. Depois de pesquisar bastante chegamos à conclusão de que não havia essa possibilidade no ZF, então desenvolví uma solução que atendeu muito bem à nossa necessidade e creio que também vai atender à outras pessoas, fazendo com que o cache seja uma propriedade do objeto model. Vamos lá.
Classe abstrata que extende da Zend_Db_Table_Abstract
-
abstract class Base_Db_Table extends Zend_Db_Table_Abstract{
-
/**
-
* Definições das configurações de cache
-
*
-
* @var $cacheFrontendOptions
-
* @var $cacheBackendOptions
-
* @var $cacheName
-
* @var $cacheObject
-
*/
-
-
protected $cacheFrontendOptions = array();
-
protected $cacheBackendOptions = array();
-
protected $cacheName;
-
protected $cacheObject;
-
-
public function init(){
-
//Iniciando cache automaticamente
-
$this->startCaching();
-
}
-
-
/* Seta o prefixo do nome do arquivo cache
-
* @param string $cacheName
-
*/
-
public function setNameCaching($cacheName) {
-
$this->cacheName = $cacheName;
-
}
-
-
/* Seta as configurações de cache
-
* @param array $cacheFrontendOptions – Array de configurações de frontend
-
* @param string $cacheName – Nome do prefixo do arquivo cache
-
*/
-
public function setCaching($cacheFrontendOptions = null, $cacheName = null) {
-
-
if($cacheFrontendOptions == null) {
-
-
$frontendOptions = array(
-
'lifetime' => 7200,
-
'automatic_serialization' => true);
-
-
} else {
-
$frontendOptions = $cacheFrontendOptions;
-
}
-
-
if($cacheName == null) {
-
$cacheName = $this->_name.'_'.date('dmy');
-
}
-
-
$cacheBackendOptions = array('cache_dir' => './application/cache_dir/');
-
-
$this->cacheFrontendOptions = $frontendOptions;
-
$this->cacheBackendOptions = $cacheBackendOptions;
-
$this->cacheName = $cacheName;
-
-
$this->startCaching();
-
}
-
-
/* Verifica se a cache está ativa no objeto Model
-
* @return bool
-
*/
-
public function isCaching() {
-
if($this->cacheObject) {
-
return true;
-
} else {
-
return false;
-
}
-
}
-
-
/* Retorna um array com as configurações de cache
-
* @return array $arrayCacheConfigs
-
*/
-
public function getCaching() {
-
if($this->cacheFrontendOptions) {
-
$arrayCacheConfigs = array(
-
'cacheFrontendOptions' => $this->cacheFrontendOptions, 'cacheBackendOptions'=>$this->cacheBackendOptions, 'cacheName' => $this->cacheName);
-
return $arrayCacheConfigs;
-
} else {
-
return false;
-
}
-
}
-
-
/* Inicia o cache
-
*/
-
public function startCaching() {
-
if($this->isCaching()) {
-
echo "
-
<pre>";
-
print_r('Cache já iniciada anteriormente: startCaching()');
-
print_r("
-
");
-
die(__FILE__.' – Linha '.__LINE__);
-
}
-
else {
-
if(!$this->getCaching()) {
-
$this->setCaching();
-
}
-
$cache = Zend_Cache::factory('Core',
-
'File',
-
$this->cacheFrontendOptions,
-
$this->cacheBackendOptions);
-
$this->cacheObject = $cache;
-
}
-
}
-
-
public function removeCaching() {
-
$this->cacheObject->remove($this->cacheName);
-
$this->cacheObject = null;
-
}
-
-
public function disableCaching() {
-
$this->cacheName = null;
-
$this->cacheFrontendOptions = null;
-
$this->cacheBackendOptions = null;
-
$this->cacheObject = null;
-
}
-
-
public function saveCaching($param) {
-
if($this->isCaching()) {
-
$this->cacheObject->save($param, $this->cacheName);
-
} else {
-
echo "
-
<pre>";
-
print_r('Cache não iniciada: saveCaching()');
-
print_r("
-
");
-
die(__FILE__.' – Linha '.__LINE__);
-
}
-
}
-
-
public function fetchAll($where = null, $order = null, $count = null, $offset = null)
-
{
-
if (!($where instanceof Zend_Db_Table_Select)) {
-
$select = $this->select();
-
-
if ($where !== null) {
-
$this->_where($select, $where);
-
}
-
-
if ($order !== null) {
-
$this->_order($select, $order);
-
}
-
-
if ($count !== null || $offset !== null) {
-
$select->limit($count, $offset);
-
}
-
-
} else {
-
$select = $where;
-
}
-
-
if($this->isCaching()) {
-
if(!$result = $this->cacheObject->load($this->cacheName)) {
-
$rows = $this->_fetch($select);
-
$data = array(
-
'table' => $this,
-
'data' => $rows,
-
'readOnly' => $select->isReadOnly(),
-
'rowClass' => $this->_rowClass,
-
'stored' => true
-
);
-
-
if (!class_exists($this->_rowsetClass)) {
-
require_once 'Zend/Loader.php';
-
Zend_Loader::loadClass($this->_rowsetClass);
-
}
-
-
$result = new $this->_rowsetClass($data);
-
$this->saveCaching($result);
-
}
-
-
} else {
-
-
$rows = $this->_fetch($select);
-
$data = array(
-
'table' => $this,
-
'data' => $rows,
-
'readOnly' => $select->isReadOnly(),
-
'rowClass' => $this->_rowClass,
-
'stored' => true
-
);
-
-
if (!class_exists($this->_rowsetClass)) {
-
require_once 'Zend/Loader.php';
-
Zend_Loader::loadClass($this->_rowsetClass);
-
}
-
-
$result = new $this->_rowsetClass($data);
-
}
-
-
return $result;
-
}
Com esta implementação, todas as consultas realizadas com o método fetchAll() serão salvas em cache no arquivo que foi definido no $cacheBackendOptions (linha 52). Se o nome do arquivo cache não for definido pelo desenvolvedor, será definido automaticamente na linha 44. Antes de realizar a consulta no banco, é verificado se já existe o arquivo no cache, caso não exista a consulta é realizada e o arquivo é criado no cache, caso existe, s resultado é retornado do cache.
Criando as configurações manualmente
Caso haja a necessidade de alterar qualquer configuração de front-end manualmente, não é necessário alterar a classe abstrata. Todas as configurações podem ser enviadas como argumento através do método setCaching() (linha 32).
Exemplo:
-
$objModel = new ObjModel();
-
-
$frontendOptions = array(
-
'lifetime' => 120,
-
'automatic_serialization' => false);
-
-
$cacheName = "Nome_do_arquivo";
-
-
$objModel->setCaching($frontEndOptions, $cacheName);
Se por algum motivo você precisar desabilitar o cache para um determinado model, utilize o método disableCaching().
Exemplo:
-
$objModel = new ObjModel();
-
$objModel->disableCaching();
Para verificar se o cache está habilitado para determinada model, utilize o método isCaching().
Exemplo:
-
$objModel = new ObjModel();
-
if($objModel->isCaching()) {
-
echo "Cache habilitada!";
-
} else {
-
echo "Cache desabilitada!";
-
}
Para a minha necessidade não precisei criar a definição manual do diretório em que os arquivos serão salvos, mas se você precisar, apenas dinamize a definição das configurações de back-end.
Enfim, é isso. Espero que seja útil. Caso tenha alguma crítica ou sugestão para a melhoria, terei prazer em recebê-la!
Documentação oficial do Zend_Cache: http://framework.zend.com/manual/en/zend.cache.html




