Como Usar Qualquer Componente Do Zend Framework Em Seus Projetos

10 jun

O Zend Framework é, sem dúvida nenhuma, um dos frameworks de PHP mais completos que existe, e uma de suas vantagens é de ser completamente modular, ou seja, seus componentes podem ser usados em qualquer projeto de uma maneira muito simples.
A seguir vou mostrar como é simples configurá-lo e tirar todo o proveito de suas classes, e ainda de quebra vou mostrar rapidamente como usar o componente Zend_Feed para criar feeds RSS.

Download

Antes de tudo é necessário baixar o framework. Em 99% dos casos o pacote Minimal é mais que o suficiente, e é o que eu recomendo que você utilize. Após terminado o download, abra o arquivo e extraia a pasta library para o local de sua preferência. Esta pasta contém todos os componentes do Zend Framework. A pasta bin pode ser ignorada, pois ela tem scripts que servem basicamente para construir projetos dentro do Zend Framework, o que não está no escopo desse tutorial.

Arquivo de Configuração

Eu gosto de colocar toda a configuração em um arquivo, e incluí-lo (usando a função require_once) onde for necessário. Em um ambiente online isso pode não fazer tanta diferença, mas como faço vários testes no meu servidor local, a única ação que tenho que tomar, pra ter certeza que posso usar todos os componentes, é incluir o arquivo de configuração.
Crie um arquivo de cofiguração chamado zf-config.php (ou qualquer nome de sua preferência). Este arquivo deve ficar da seguinte maneira:

/**************** Zend Framework Autoloader ******************/
set_include_path(implode(PATH_SEPARATOR, array(
	realpath('caminho/para/a/pasta/library'),
	get_include_path(),
)));

require_once('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance();
/*************************************************************/

A função set_include_path é de extrema importância, pois garante que todos os componentes estarão acessíveis pelo autoloader, que é usado em seguida.
O autoloader é responsável pela mágica de carregar todas a classes que você precisa, sem a necessidade de usar as funções require ou include (certamente você vai adorar isso!). Para iniciar o autoloader basta usar a função require_once com seu caminho(lembre-se que o autoloader é o responsável por carregar todas as classes, então é obrigatório incluí-lo manualmente). É importante ressaltar que o caminho sempre será Zend/Loader/Autoloader.php, porque nesse momento já temos a pasta library no include_path! Em seguida basta inicializá-lo, executando o método estático Zend_Loader_Autoloader::getInstance(), e pronto, isso é tudo que precisamos!

A execução do método Zend_Loader_Autoloader::getInstance() passa uma função de autoloader para o registrador de autocarregamento SPL. Assim você pode integrar os componentes do Zend Framework sem que eles afetem o carregamento de suas classes em seus projetos.

Criando Feeds RSS com o componente Zend_Feed

Para mostrar como é fácil usar os componentes do Zend Framework, vou mostrar como criar um feed RSS bem simples.
Primeiro crie um arquivo chamado feed.php (ou o nome que você achar mais conveniente). Em seguida carregue o arquivo de configuração que criamos anteriormente. Daí basta utilizar a classe Zend_Feed_Writer_Feed, como visto no código abaixo:

require_once('zf-config.php');

$feed = new Zend_Feed_Writer_Feed;

$feed->setTitle('Título do meu RSS');
$feed->setLink('http://link-do-meu-site.com');
$feed->setFeedLink('http://link-do-meu-feed.com','atom');
$feed->addAuthor('Eduardo de Matos');
$feed->setDescription('Descrição do meu feed');

// Normalmente os dados vêm do banco de dados, 
// e um loop é usado para criar cada item.

// Criando o primeiro item
$entry = $feed->createEntry();
$entry->setTitle('Meu primeiro item');
$entry->setLink('http://link-do-meu-primeiro-item.com');
$entry->setDateModified(strtotime('2 hours ago'));
$entry->setDescription('Descrição do meu primeiro item');
$entry->setContent('Conteúdo do meu primeiro item');
// Adicionando item ao feed
$feed->addEntry($entry);

// Criando o segundo item
$entry = $feed->createEntry();
$entry->setTitle('My segundo item');
$entry->setLink('http://link-do-meu-segundo-item.com');
$entry->setDateModified(strtotime('1 hour ago'));
$entry->setDescription('Descrição do meu segundo item');
$entry->setContent('Conteúdo do meu segundo item');
// Adicionando item ao feed
$feed->addEntry($entry);

// Exportando o feed no formato RSS (e jogando-o para o navegador)
$out = $feed->export('RSS');
echo $out;

Acessando a página /feed.php pelo navegador, temos o seguinte output:

<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"> 
  <channel> 
    <title>Título do meu RSS</title> 
    <description>Descrição do meu feed</description> 
    <generator>Zend_Feed_Writer 1.11.6 (http://framework.zend.com)</generator> 
    <link>http://link-do-meu-site.com</link> 
    <author>Eduardo de Matos</author> 
    <dc:creator>Eduardo de Matos</dc:creator> 
    <atom:link rel="self" type="application/atom+xml" href="http://link-do-meu-feed.com"/> 
    <item> 
      <title>Meu primeiro item</title> 
      <description><![CDATA[Descrição do meu primeiro item]]></description> 
      <pubDate>Thu, 09 Jun 2011 10:26:03 +0000</pubDate> 
      <link>http://link-do-meu-primeiro-item.com</link> 
      <guid>http://link-do-meu-primeiro-item.com</guid> 
      <content:encoded><![CDATA[Conteúdo do meu primeiro item]]></content:encoded> 
    </item> 
    <item> 
      <title>My segundo item</title> 
      <description><![CDATA[Descrição do meu segundo item]]></description> 
      <pubDate>Thu, 09 Jun 2011 11:26:03 +0000</pubDate> 
      <link>http://link-do-meu-segundo-item.com</link> 
      <guid>http://link-do-meu-segundo-item.com</guid> 
      <content:encoded><![CDATA[Conteúdo do meu segundo item]]></content:encoded> 
    </item> 
  </channel> 
</rss> 

Internamente este componente faz uso de outras classes, como Zend_Date por exemplo, mas graças ao autoloader não há necessidade de se preocupar com essas inclusões. Os nomes dos métodos são autoexplicativos, e dispensam uma explicação detalhada. Se quiser mais detalhes, recomendo que leia a documentação. Caso não se sinta confortável criando feeds RSS, leia meu tutorial onde explico de forma mais detalhada o funcionamento desse serviço.

Conclusão

Existem dezenas de outros componentes que são fantásticos, e aconselho que leia a documentação para aprender a usá-los, pois ajudam bastante em nosso dia-a-dia como desenvolvedores.

Espero que essa dica tenha sido proveitosa! sinta-se a vontade para criticar/sugerir/questionar qualquer ponto desse tutorial. Até a próxima!

Tags:, , ,

12 Respostas para “Como Usar Qualquer Componente Do Zend Framework Em Seus Projetos”

  1. Felipe Girotti 14/07/2011 às 22:57 #

    Boa dica.

  2. André 18/10/2011 às 14:11 #

    E ae cara.. bom!

    O que tá acontecendo… seu blog é muito bom cara, não deixa de atualizá-lo não.

    Abraço,

    André

    • Eduardo de Matos 18/10/2011 às 18:35 #

      Os últimos meses têm sido bem turbulentos pra mim. Mas pretendo voltar a escrever em breve.

      Abraço!

  3. thelucassilva 24/10/2011 às 15:51 #

    hmss.. agora ficou show o site em :) gostei!

  4. marciosnetblog 12/11/2011 às 11:00 #

    Olá Eduardo, tudo bom?

    Estou me aventurando no Zend, e já começou a surgir algumas dúvidas.

    Eu estou pretendendo criar minhas próprias classes(Como um Helper, por exemplo), porém não estou conseguindo utiliza-las(Leia-se instancia-las).

    Poderia me dizer onde configurar essa opção?
    Abraços!

    PS: Gostei do novo visual, mas o antigo era ótimo também. Deixou de lado o antigo site?

    • Eduardo de Matos 12/11/2011 às 12:13 #

      De maneira geral o local mais correto de criar suas classes é em uma pasta dentro da pasta library.

      Por exemplo, se você quer criar uma classe para uma Pessoa, você pode criar uma pasta chamada “App” (dentro da pasta library), em seguida criar um arquivo chamado “Pessoa.php”, daí nomear a classe “App_Pessoa”. Para que essa classe seja autocarregada, basta você incluir o seguinte no arquivo config.ini (que fica na pasta “Application/Config”): autoloaderNamespaces[] = “App”. Feito isso, você pode simplesmente instanciar suas classes normalmente.

      Fique atento para duas coisas.
      1º – Os underlines (underscores) devem seguir a mesma estrutura de pastas, ou seja, uma classe chamada “App_Automovel_Carro” ficaria na pasta “App/Automovel” e seu arquivo teria o nome “Carro.php”.
      2º – Sempre que você incluir uma pasta dentro da pasta library, esta deve ser mencionada no arquivo config.ini, conforme te indiquei acima.

      Sobre o blog novo/antigo, na verdade decidi usar o wordpress.com, que é gratuíto. Achei que não valia a pena pagar um servidor pra criar um simples blog.

      Abraço!

      • marciosnetblog 12/11/2011 às 12:37 #

        Vou testar aqui, qualquer resultado eu posto! Muito obrigado Eduardo! Obrigado mesmo! Eu sabia que deveria ir no .ini, mas não fazia ideia de como locar isso.

        Sobre os underscores, eu já havia notado isso. Um amigo que usa Zend havia me alertado sobre, fiquei fascinado! rs

        Sobre o blog, intendi o seu lado, faz sentido.
        Ia perguntar sobre novos tutoriais, mas já obtive a resposta logo acima. Abraços!!

      • Eduardo de Matos 12/11/2011 às 14:42 #

        Pretendo fazer novos tutoriais, mas possivelmente só no ano que vem.

  5. Marcio Vinicius 12/11/2011 às 13:16 #

    Funcionou perfeito o Autoloader, Eduardo! Muito obrigado!

  6. Marcio Vinicius 13/11/2011 às 2:36 #

    Eduardo, você já conseguiu utilizar o Doctrine no Zend? Se sim, poderia me passar a fonte de onde você extraiu ?

    Estou há um tempinho e ainda não consegui rs

    • Eduardo de Matos 13/11/2011 às 9:14 #

      Suponho que você já use o Doctrine 2, certo?
      Existe um pacote chamado Bisna que geralmente o pessoal baixa e utiliza. Ele já tem praticamente tudo configurado pra você integrar o Doctrine 2 com o Zend Framework 1.

      Caso você ainda use o Doctrine 1, pode acompanhar esse tutorial: Introducing Doctrine 1.2 Integration.

      Abraço!

      • marciosnetblog 16/11/2011 às 11:54 #

        Eu estou usando a versão 1.2.4, pelo fato dela ser compatível com o PHP 5.2. Porém vou estudar a 2.0

        Consegui integrar os dois, a vídeo aula é excelente. Obrigado pela indicação!!

        Abraços

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.