quarta-feira, 27 de maio de 2009

Zend Framework - Tutorial de sobrescrita do método preDispatch() do Zend_Controller_Action

O Zend_Controller_Action proporciona dois métodos que podem ser chamados a cada Action solicitada, o preDispatch() e o postDispatch(). Este métodos podem ser úteis de variadas maneiras, entre elas o controle de autenticação.

Este tutorial tem como objetivo exemplificar a utilização do método preDispatch() através da sobrescrita por uma classe extendida do Zend_Controller_Action.

No formulario criado pelo Zend_Form, como exemplo a seguir, setAction será atribuído com a baseUrl + Controller + Action:



$form = new Zend_Form();

$form->setAction($this->baseUrl.'/usuario/cadastrar')
->setMethod('post');

$form->addElement('text','username',array(
'validators' => array(
'alnum',
array('regex', false, '/^[a-z]/i')
),
'required' => true,
'filters' => array('StringToLower'),
));

$form->addElement('submit','Enviar');

echo $form->render();



Percebam que a baseUrl foi passada através de do atributo $this->baseUrl. Uma maneira de passar a baseUrl seria no UsuarioController, na cadastrarAction(), conter o seguinte comando:


$this->baseUrl = $this->getFrontController()->getBaseUrl();
$this->view->baseUrl = $this->baseUrl;


Desta maneira seria possível passar no formulário apenas $this->baseUrl. Porém em todos os Controllers e Actions deveria ter as duas linhas de comando acima. Para que isto não seja necessário devemos utilizar o método preDispatch() do Zend_Controller_Action. Aonde para cada Action chamada será executado o método em questão. Uma maneira de sobrescrever é criar uma classe genérica, em que todas os controllers deverão extender desta classe. A classe genérica deverá extender a classe Zend_Controller_Action.

GenericoController.php:



class GenericoController extends Zend_Controller_Action {

private $baseUrl;

/** Este método é uma sobrescrita do preDispatch() do Zend_Controller_Action
*
* @see app/zf/Zend/Controller/Zend_Controller_Action#preDispatch()
*
* Será executado antes de qualquer chamada a um Action do Controller
*
*/
public function preDispatch() {
$this->baseUrl = $this->getFrontController()->getBaseUrl();
$this->view->baseUrl = $this->baseUrl;
}

}


Espero ter ajudado!

Atenciosamente,
Rondson Lima

quarta-feira, 20 de maio de 2009

PostgreSQL - Como converter data (timestamp) para o formato Brasileiro - BRT

A seguir apresento duas maneiras de converter data através de uma consulta SQL:

1) É utilizado a função date_part que retorna parte de uma data conforme parâmetro informado.

modo 1:


SELECT date_part('day',now()) || '/' || date_part('month',now()) || '/' || date_part('year', now())


resultado: "20/5/2009"

2) É utilizado a função to_char que converte a data informada pelo timestamp (data e hora atual) para o formato informado no segundo parâmetro da função.

modo 2:


SELECT to_char(timestamp 'now', 'DD/MM/YYYY)


resultado: "20/05/2009"


fonte: http://www.postgresql.org/docs/6.3/static/c10.htm

Atenciosamente,
Rondson Lima

segunda-feira, 11 de maio de 2009

Decodificar dados codificados com MIME base 64

Prezados,

Caso deparem-se com dados codificados na base 64 e necessitem decodificar. Apresento-lhes duas maneiras:
1 - PHP:


$base64 = 'JVBERi0xLjMKJZKgoooKNCAwIG9iago8PC9UeXBlL1hPYmplY3QKL1N1YnR5cGUvSW1hZ2UK
MDc3MjA4MiAwMDAwMCBuIAowMDAwNzcyMTk0IDAwMDAwIG4gCjAwMDEwMDYxNjggMDAwMDAg
biAKMDAwMTAwNjI4OSAwMDAwMCBuIAowMDAxMDA2MzA4IDAwMDAwIG4gCjAwMDEwMDYzNzUg
MDAwMDAgbiAKMDAwMTAwNjQ4NyAwMDAwMCBuIAowMDAxMjU1MTk2IDAwMDAwIG4gCjAwMDEy
NTUzMTcgMDAwMDAgbiAKMDAwMTI1NTMzNiAwMDAwMCBuIAowMDAxMjU1NDAzIDAwMDAwIG4g
CjAwMDEyNTU1MTUgMDAwMDAgbiAKMDAwMTQ4NzQyNiAwMDAwMCBuIAowMDAxNDg3NTQ3IDAw
MDAwIG4gCjAwMDE0ODc1NjYgMDAwMDAgbiAKMDAwMTQ4NzYzMyAwMDAwMCBuIAowMDAxNDg3
NzQ1IDAwMDAwIG4gCjAwMDE3NTQ0MjcgMDAwMDAgbiAKMDAwMTc1NDU0OCAwMDAwMCBuIAow
MDAxNzU0NTY3IDAwMDAwIG4gCjAwMDE3NTQ2MzQgMDAwMDAgbiAKMDAwMTc1NDc0NiAwMDAw
MCBuIAowMDAxOTc1NDUwIDAwMDAwIG4gCjAwMDE5NzU1NzEgMDAwMDAgbiAKMDAwMTk3NTU5
MCAwMDAwMCBuIAowMDAxOTc1NjU3IDAwMDAwIG4gCnRyYWlsZXIKPDwvU2l6ZSA0NAovSW5m
byAzIDAgUgovUm9vdCAyIDAgUgo+PgpzdGFydHhyZWYKMTk3NTk3MwolJUVPRgo=';

echo base64_decode($base64);
?>


Na string acima não inseri todos os caracteres porque este é muito extenso, mas o conteúdo completo retornaria um arquivo pdf.

2 - Online:
No site: http://www.opinionatedgeek.com/dotnet/tools/Base64Decode/ é possível decodificar dados na base 64. Insira no textarea o conteúdo clique em 'decode', aparecerá uma caixa de diálogo para salvar o arquivo. Ao efetuar o download substitua a extensão do arquivo para a original. Exemplo:
arquivo baixado: 'attachment.bin'
arquivo alterado: 'attachment.pdf'

Atenciosamente,
Rondson Lima

quinta-feira, 7 de maio de 2009

PHP - Como importar automaticamente todas as classes

Para quem não deseja efetuar importação das classes necessárias em cada classe em edição, há uma função php "__autoload()" responsável por realizar a importação de todas as classes automaticamente, conforme código a seguir.

index.php:


/**
* Método responsável por carregar todas as classes presentes no projeto.
* Desta maneira não é necessário realizar a importação individual de classes.
*
* @param unknown_type $class_name
*/
function __autoload($class_name) {

// Inserir os diretórios no path
set_include_path('.'
.PATH_SEPARATOR.'./controller'
.PATH_SEPARATOR.'./model/'
.PATH_SEPARATOR.'./view/'
.PATH_SEPARATOR.get_include_path());

// Importar as classes
require_once $class_name . '.php';
}

?>


Dependendo das necessidades há outros exemplos no endereço abaixo:
fonte: php.net