domingo, 12 de junho de 2011

HELP ! :: Criando Views Helpers no Zend Framework

Os View Helpers são classes extras que você usa para realizar certas tarefas específicas nas views. Ou seja, como o próprio nome diz, eles servem para auxiliar nas views.
Para criar uma View Helper, basta ir na pasta 'application/views/helpers' criar uma classe 'Minhaviewhelper.php', e no conteúdo coloque


class Zend_View_Helper_Minhaviewhelper extends Zend_View_Helper_Abstract {
  
         public function minhafuncaoviewhelper(){

                       ...

         }
  
}

E pronto, basta ir a qualquer controller e usar

class MeucontrollerController extends Zend_Controller_Action {

                      ...

             public function minhafuncao(){

                      ...

                     $this->view->minhafuncaoviewhelper();

             }

                      ...

}

ou numa view qualquer



blablabla em html

<? $this->minhafuncaoviewhelper(); ?>

blablabla


Feito.


Referências: http://framework.zend.com/manual/en/zend.view.helpers.html


sexta-feira, 10 de junho de 2011

Formule alguma coisa : Criando formulários em Zend Framework parte 3 :: Salvando dados enviados dos formulários

Agora, após termos criado o formulário ( parte 1 ) e criado os métodos de envio dos dados ( parte 2 ), vamos slavá-los num banco de dados.

Para inserir dados de seu formulario no banco de dados, usamos os models.

Abre um terminal e crie o model

$ zf create model meumodel

Abra o arquivo 'models/Meumodel.php' e veja que dentro está assim, vaziozão:

class Model_Meumodel extends Zend_Db_Table {
 
}

Esse vai ser a classe com que você irá trabalhar os dados do banco de dados com o controller e vice-versa.
Em específico ao nosso caso, vai ser o responsável por salvar os dados do formulário no banco de dados.
Primeiro, setamos a tabela do banco de dados que será trabalhada, acrescentando uma variável protegida no model

class Model_Meumodel extends Zend_Db_Table {

    protected $_name = 'minhatabela';

}

e agora, o campo da tabela que trabalha como seu índice

class Model_Meumodel extends Zend_Db_Table {

    protected $_name = 'minhatabela';
    protected $_primary = 'id';

}

Colocamos o campo 'id' como mera ilustração, pode ser qualquer outro campo, e no caso de você ter esquecido de declarar o campo índice, o Zend toma por padrão o primeiro campo chamado 'id' que porventura tenha na tabela. No caso de não haver um campo 'id' e você não ter declarado o campo índice, não sei o que acontece, por isso, é bem melhor declarar mesmo explicitamente o 'id' pra não correr riscos.
Agora, criemos no model a função que irá cadastrar o usuário

class Model_Meumodel extends Zend_Db_Table {

    protected $_name = 'minhatabela';
    protected $_primary = 'id';

    /*
     * Função que insere dados na tabela
     */
    public function insereDados($data){

        // Insere os dados do array '$data' no banco de dados.
        // Caso não seja possível inserir no banco de dados retorna falso.
        try{ $this->insert($data); return true; }
        catch( Zend_Db_Exception $e){ return false; }

    }

}

'$this->insert()' é o método da classe Zend_Db_Table que faz o trabalho sujo.
Agora, voltando ao nosso controller do formulario da parte 2 de nosso tutorial, lembremos que deixei uma parte escrito '<codigo surpresa>'

// Caso os dados sejam válidos.
if( $form->isValid($data) ){

    <codigo surpresa> <- olha a parte do código surpresa aqui

}
Pois bem, nessa parte, que fica logo depois de termos recebido os dados e depois deles term sido devidamente validados, é onde colocamos o resto do codigo
// Cria o objeto do model.
$objeto_model = new Model_Meumodel();
    
// Tenta inserir os dados no db.
// Caso dê certo, é impresso uma mensagem na view.
if( $objeto_model->insereDados($data) ){

    $mensagens = "Usuário criado com sucesso.";
    $this->view->mensagens = $mensagens;
     
}

// Caso dê algo errado com a inserção no banco de dados,
// é impresso uma mensagem de erro e voltamos ao formulário
// com os dados populado, para caso seja algum problema de 
// digitação.
else{
      $this->view->mensagens = "Não foi possível criar usuário.";
      // Reenvia os dado para o formulário.
      $form->populate($data);
      $this->view->formulario = $form;
}
E assim completamos nosso formulário em Zend. Basta testar e usar.
Referência: http://framework.zend.com/manual/en/zend.form.html http://framework.zend.com/manual/1.11/en/learning.quickstart.create-model.html

Formule alguma coisa : Criando formulários em Zend Framework parte 2 :: Submetendo dados

Após criar o formulário dado na parte 1 de nosso tutorial, agora vamos submeter os dados recebidos pelo formulário.

No arquivo de formulario, setamos a ação como do form para 'minhaacao'.

class Form_Meuformulario extends Zend_Form{

    public function init(){

        // Ação para a página de envio do form.
        $this->setAction('.../minhaacao');

        // Método de envio do form.
        $this->setMethod('post');
        
        // Uma caixa de texto.
        $this->addElement('text', 'nomedoform',
                          array('label' => 'Label do form')
                         );

        // Botão de submissão.
        $this->addElement('submit', 'submit', 
         array('label'    => 'Enviar')
  );

   }

}

Editemos o arquivo de controller com a acao 'minhaacao' e acrescentamos a linha que irá receber os dados do formulario

class MeucontrollerController extends Zend_Controller_Action{

...

      public function minhaacaoAction(){

             // Cria o objeto de formulario.
             $form = new Form_Meuform();
 
             // Envia para o view o formulario.
             $this->view->formulario = $form;

             // Pega os dados enviados via POST.
             $data = $this->_request->getPost();

      }

...

}

Você pode mandar os dados para o view atraves da linha

...
$this->view->dados = $data;
    ...

e pra visualizar na views é só mandar imprimir com a linha

...
<?php print $this->dados; ?>
    ...

O próximo passo é a autenticação dos dados enviados. Para isso acrescentamos as linhas

class MeucontrollerController extends Zend_Controller_Action{
    
    ...

    public function minhaacaoAction(){

             // Cria o objeto de formulario.
             $form = new Form_Meuform();
 
             // Envia para o view o formulario.
             $this->view->formulario = $form;

             // Verifica se foram enviados dados via post.
             if( $this->_request->isPost() ){
             
                // Pega os dados enviados via POST.
                $data = $this->_request->getPost();

                // Caso os dados sejam válidos.
                if( $form->isValid($data) ){
                      <codigo surpresa>
                }

             }
             else{
                // Imprime na view o formulario por default 
                // assim que entra na página do formulário.
                $this->view->formulario = $form;
             }

      }

...

}

Aqui acrescentamos uma condição para verificar se foram enviados dados via POST. Se foram, então os dados são armazenados em '$data', assim, é verificado com 'isValid($data)' se os dados são validos de acordo com as regras de validação estipuladas pelo formulário que fizemos.
Agora, pra completar essa parte, queremos que, no caso de os dados não forem válidos, retornar ao formulário pra corrigir esses dados. Para não ter que fazer o usuário repetir tudo de novo, repopulamos o formulários com esses mesmos dados.
Para isso, acrescentamos mais umas linhas na ação acima:

class MeucontrollerController extends Zend_Controller_Action{
...

    public function minhaacaoAction(){

        // Cria o objeto de formulario.
        $form = new Form_Meuform();
 
        // Envia para o view o formulario.
        $this->view->formulario = $form;

        // Verifica se foram enviados dados via post.
        if( $this->_request->isPost() ){
             
            // Pega os dados enviados via POST.
            $data = $this->_request->getPost();

            // Caso os dados sejam válidos.
            if( $form->isValid($data) ){
                <codigo surpresa>
            }
            // Caso os dados não sejam válidos.
            else{
                // Se os dados não forem válidos, é reimpresso o
                // formulário com os dados repopulados para serem
                // corrigidos.
                $form->populate($data);
                $this->view->formulario = $form;
            }

        }
        else{
                // Imprime na view o formulario por default 
                // assim que entra na página do formulário.
                $this->view->formulario = $form;
        }

    }

...

}

E assim, nosso formulario esta praticamente completo. Só não está ainda por que, onde está escrito '<codigo surpresa>' podemos colocar dois tipos de códigos dependendo de nossos objetivos:

1 - código para inserir os dados no banco de dados
2 - código para autenticação de um formulário de login

Ou seja, o formulário feito até agora é geral o bastante pra usarmos tanto pra um formulario qualquer quanto para um formulario para fazer login no sistema.

Por isso teremos a terceira parte do formulário em Zend - salvar os dados do formulário no banco de dados, e num outro tutorial iremos apreveitar o que aprendemos até aqui pra criar um sistema de login.

Agora estamos prontos para a terceira parte de nossa série:

Formule alguma coisa : Criando formulários em Zend Framework parte 3 :: Salvando dados enviados dos formulários



Referência: http://framework.zend.com/manual/en/zend.form.html


Formule alguma coisa : Criando formulários em Zend Framework parte 1 :: Criando forms

Para criar um formulário no Zend Framework, abre um terminal, vá a pasta de seu projeto e digite

$ zf enable form

$ zf create form meuform

Vai ser criada um arquivo com a classe de criação do formulário

/* .../application/forms/Meuform.php */

class Form_Meuform extends Zend_Form{

    public function init(){

    }

}

Coloque na ação 'init()' o código de criação dos forms:

$this->setAction('minhaurl');


para definir a ação do form, e

$this->setMethod('meumetodo');

para definir o método de envio (POST,GET,etc).
Agora, adicione um elemento de form ( text, button, submit, etc ):

$this->addElement($arraydeconfiguracaodoelemento)

Veja o manual do Zend para a configuração de cada elemento.

Um exemplo de um formulário mínimo, com uma caixa de texto e um botão de submissão:

class Form_Meuform extends Zend_Form{

    public function init(){

        // Ação para a página de envio do form.
 $this->setAction('inscricao');

        // Método de envio do form.
        $this->setMethod('post');
        
        // Uma caixa de texto.
        $this->addElement('text', 'nomedoform', 
         array('label' => 'Label do form')
  );

        // Botão de submissão.
        $this->addElement('submit', 'submit', 
         array('label'    => 'Enviar')
  );

   }

}

Criamos a ação 'minhaacao' no controller 'Meucontroller.php', o que terá a view 'minhaacao.phtml'.
Na ação 'minhaacao' do controller, criamos o objeto de formulário

class MeucontrollerController extends Zend_Controller_Action{

...

      public function minhaacaoAction(){

             // Cria o objeto de formulario.
             $form = new Form_Meuform();
 
             // Envia para o view o formulario.
             $this->view->formulario = $form;

      }

...

}


E no view 'application/views/scripts/meucontroller/minhaacao.phtml' coloque

<?php print $this->formulario; ?>

Abra o navegador na página de seu site, e digite

http://meusite.com.br/meucontroller/minhaacao

E se não deu nada errado, seu formulário aparecerá na página.

Veja agora a segunda parte da série

Formule alguma coisa : Criando formulários em Zend Framework parte 2 :: Submetendo dados



Referências:


Zend Manual: Zend Form


quarta-feira, 8 de junho de 2011

Silêncio na biblioteca : Como e onde colocar suas próprias bibliotecas no Zend Framework

O Zend têm coisa pra caramba em sua biblioteca. Sempre que puder, usae-as, não fique reinventando a roda. Mas quando o Zend não têm o que precisamos, devemos criar nossas próprias bibliotecas.

E surpreendentemente, fazer sua prórpria biblioteca no Zend é moleza.

Apenas crie na pasta '/library' de sua aplicação uma pasta com suas próprias classes.
Pro exemplo, crio uma pasta

/library/Minhabiblioteca/Minhasclasses1

e

/library/Minhabiblioteca/Minhasclasses2

E sempre escreva a primeira letra de qualquer pasta em '/library' em maiúscula, esse é o padrão do Zend.
Vamos colocar uma classe em cada pasta

/library/Minhabiblioteca/Minhasclasses1/Umaclasse1.php

e

/library/Minhabiblioteca/Minhasclasses2/Umaclasse2.php

Agora, em cada classe, no cabeçalho de declaração de classes, você coloca

class Minhabiblioteca_Minhasclasses1_Umaclasse1 {

...

}

Percebeu o esquema ? Na declaração da classe, você coloca o nome das pastas, sempre com a primeira letra do nome em maiusculo, unidas por underline, e finaliznado com o nome da classe.

Agora, no arquivo de configuração 'application.ini' coloque a linha

autoloaderNamespaces[] = "Minhabiblioteca"

para sua biblioteca ser adicionada ao PATH da aplicação.

Crie seus métodos e objetos, e poderá usar em qualquer lugar do Zend, basta pra isso você chamar em qualquer local que você queira com

$obj = new Minhabiblioteca_Minhasclasses1_Umaclasse1()

e estarão disponíveis seus métodos e objetos que você criou pra usar ali.
Você pode até mesmo extender alguma classe do Zend, por exemplo, Zend_Front_Controller

class Minhabiblioteca_Minhasclasses1_Umaclasse1 extends Zend_Front_Controller {

...

}

e qualquer outra classe que você precisar usar do Zend.

Acreditem, eu fiquei surpreso de não precisar declara nada no Bootstrap, no config ou no 'index.php' pra fazer minha libs funcionarem no Zend.

Espero que a felicidade agora bata na porta de vocês.


Fonte: http://framework.zend.com/manual/1.11/en/performance.classloading.html


terça-feira, 7 de junho de 2011

Framework o caramba ! Eu tô usando Zend !

Antes de mais nada, advirto que foi o estagiário quem escreveu o título.
Daqui em diante eu mesmo assumo.

Pois bem, Zend Framework é SIM um framework.

O que é um framework ?

Um framework é um conjunto de bibliotecas de uma certa linguagem de programação voltados a uma função específica.
Por exemplo, existem frameworks escritos em C para bancos, e como tais, possuem funções específicas para manipulação de transações bancárias e assim programas bancarios poderem ser feitos sem precisar reinventar a roda ( ou seja, criar do zero funções para manipular transações bancárias ).

No caso do Zend, ele é um conjunto de bibliotecas para PHP voltado para fazer sites.
Com Zend, é possível fazer sites dos mais simples, com algumas páginas estáticas, a até sistemas inteiros ( como os netbankings e e-commerces - magento é um deles feito com Zend ).
Se fossem feitos do zero, demoraria um bom tempo até você criar suas próprias bibliotecas, seus próprios esquemas de segurança, etc.
Além do mais, a vantagem de se usar um framework é a padronização. Com padronização entenda que um desenvolvedor usando um framework popilar, vai poder fazer um programa que outro programador - que também conhece o framework - poderá entender e assim continuar a desenvolver de forma mais rápida e eficiente também.

Quer dizer, o uso de um framework não só ajuda individualmente, mas também em trabalho em grupo. Afinal , se cada um faz uma biblioteca diferente para o mesmo projeto, todo mundo vai ter de gastar um tempo tentando entender o que todo mundo fez, ao contrario da situação em que, se todo mundo aprender a usar o mesmo framework, isso não será mais problema.


Existem muitos frameworks em PHP para sites por ai. Alguns pagos, outros de gratuitos.
Dos gratuitos ( que é a preferência da maioria, não sei porque ) temos esses daqui, dentre eles, temos o Zend.

A preferência pelo Zend, na minha opinião, é que ele é desenvolvido pelo próprio grupo que mantêm o PHP, e ao longo das versões, vêm se tornando o padrão preferido de mercado.
A bem da verdade, o Zend inicialmente era um monstrengo complicado e pesado, mas nessa última versão ( v1.11 em 07/06/2011 ) está sendo muito prazeiroso usá-lo e a eficiencia está satisfatória - não sei o quanto, meus projetos ainda são pequenos pra perceber a diferença - no entanto, convido ao leitor a testar tantos frameworks puder para ver qual se adequa as suas nescessidades e gostos, tomando Zend como um opção, não como O framework definitivo.

Este blog criei em primeira instância, para colocar o que aprendi/aprendo em Zend, podendo ser considerado um "querido diário" de programação, pois tive a idéia de fazê-lo pelo tanto de tutoriais que existem por ai, mas muito poucos são fáceis ou intuitivos pra quem quer logo meter a mão na massa, e portanto, pretendo realizar postagens que sejam tão rápidos e práticos quanto possível, se não o for, é porque foi inevitável.

Assim, agradecerei as críticas ( construtivas ) , opiniões e sugestões que os leitores porventura venham a fazer.

Agora, se não vão continuar a ver meu blog, voltem ao trabalho, e boa programação.