Categorias
Dica Zend Framework

[ Dica Zend ] – Como adicionar classes próprias|customizadas no Zend Framework

Atendendo ao pedido de um visitante do meu Blog, o colega Renan, ai vai uma dica fácil e rápido para você adicionar suas próprias classes no Zend Framework.

No seu arquivo application.ini, insira a linha:


;
; Obviamente, você deve colocar o nome que melhor
; lhe convém, no Caso, sempre terminando com o sufixo "_"
; neste caso Proprias vira Proprias_

autoloaderNamespaces.custom = "Proprias_"

; ou

autoloaderNamespaces[]  = "Proprias_"

Feito isto, você deve criar uma pasta com o mesmo nome que você passou para o registro de configurações do Zend dentro da sua pasta library.

library/Proprias

Agora, se você gostaria de criar uma classe qualquer, suponhamos, Teste, você deverá fazer o seguinte:

1) Criar a classe com o caminho completo para ela:
Ex.:


class Proprias_Teste
{
    ....
}

2) Salvar o arquivo com o nome da classe sem o prefixo:
Ex.: library/Proprias/Teste.php

Desta forma você já pode chamar sua classe em qualquer local dentro de sua aplicação:


class IndexController extends Zend_Controller_Action
{
    public function init()
    {
        $minhaClasse = new Proprias_Teste();
    }
    ....
}
Categorias
Dica Zend Framework

[ Dica Zend Framework ] – Como pegar o último id {lastInsertId} de uma consulta

Então, mas uma pegadinha do malandro!

Normalmente, quando estamos criando Models customizamos até mesmo o nome dos métodos padrões da classe Zend_Db_Table_Abstract e acabamos nos deparando com resultados inesperados.

Um exemplo prático:

Supondo que voce criou um Model Produtos, as chances de você criar um método cadastrar, ou novo, ou inserir, são enormes, dai a queixa.


...
public function cadastrar( $dados )  {
    $this->insert( $dados );
}
...

Ai na hora de inserir os dados você deseja saber o último id inserido e não sai nada.

E você faz algo do tipo:


...
public function cadastrarAction()  {
    $db = new Produtos();
    $dados = array(
        'nome' => $this->getRequest()->getPost('nome'),
        'descricao' => $this->getRequest()->getPost('descricao'),
        'valor' => $this->getRequest()->getPost('valor')
    )
    $id = $db->cadastrar( $dados );
}
...

Ai o que acontece? Voce insere certinho, mas não retorna o id.

A dica esta tem duas partes:

1) Talvez voce tenha esquecido de colocar o return no Model para o método cadastrar


...
    return $this->insert( $dados );
...

2) Voce não colocou o ID na variável $dados. Vale ressaltar aqui, que o Zend manipula os tipos de dados bem estritamente, e certas operações não estarão disponíveis se você não for específico com o tipo de dado em uso, neste caso, o ID a ser retornado é do tipo NULL e logo, você tem que fazer isto:


...
    $dados = array(
        'id' => null // observe que é null e nao 'null' entre aspas, senao seria string
...