ב"ה

Blog do Adler Medrado

Blog do Adler Medrado

Mar 2 / 4:59pm

Documentação do Zend Framework Atualizada

Estava agora a pouco no site do Zend Framework e ao observar a área de documentação eu percebi que estava um pouco diferente, melhor do que a última vez que eu tinha visto.
Eu não costumo acessar os docs diariamente então talvez eu esteja chegando um pouco atrasado, de qualquer maneira, como não vi e nem ouvi ninguém comentando a respeito eu estou publicando isto no meu blog para que os meus leitores possam aproveitar também.

A última vez que olhei, a documentação parecia um pouco desatualizada mas agora além de parecer mais atual ela está mais organizada tendo além do Quickstart, seções com exemplos de uso de componentes como Zend_Layout, Zend_Form_Decorators, Zend_Session, Zend_Auth, Zend_Acl, Zend_Paginator, Zend_Search_Lucene, entre outros e além desses exemplos de uso, tem todo o material de referência dos componentes.
Bom, fica a dica. Caso tenha se interessado, veja com seus próprios olhos e aproveite.

 

Loading mentions Retweet
Filed under  //  php   zend framework  

Comments (0)

Feb 17 / 4:47am

Treinamentos da Zend em Português

Acabei de saber pela lista do PHPBC (www.php.org.br) que a Zend vai iniciar treinamentos em Português.

Apesar de eu achar a ementa deles muito fraca eu não posso negar que é uma boa oportunidade para brasileiros que sempre se interessaram em participar dos treinamentos da Zend mas tinham como barreira o idioma inglês.

Se você está disposto a gastar um dinheirinho ($1000 - Mil dólares) com esse treinamento, obtenha maiores informações aqui: http://www.zend.com/services/training/administration/course-schedule#PHP1

Mesmo achando o curso muito caro e com uma carga horária ridícula (9 aulas / 2 horas por aula) eu gostei de saber disso porque isso demonstra que a Zend está começando a olhar para o mercado brasileiro com outros olhos pois todos sabemos que ela sempre torceu o nariz para nós até descobrir que a comunidade brasileira é enorme sem falar no nosso mercado interno.
Resumindo: Que bom que a Zend acordou, mesmo que tarde (o papo de BRICs e tal, já rola a pelo menos uns 5 anos).

Abraços.

-- In English --

I just know from PHPBC (www.php.org.br) that Zend will begin PHP training classes in Portuguese language.

Although I find the course topics very poor, i cannot deny that it is a good opportunity for Brazilians who have always been interested in atend these Zend trainings but they had the language barrier.

If you're willing to spend a buck ($ 1000 - One thousand U.S. dollars) with this training, get more information here: # http://www.zend.com/services/training/administration/course-schedule#PHP1

Even finding the course very expensive and with a ridiculous workload (9 lessons / 2 hours per class), i liked it because it shows that Zend is starting to look at the brazilian market with new eyes because we know that Zend always twisted the nose for us until discover that the Brazilian community and internal market is huge.

In short: I'm glad that Zend wake up, even though later (the talk of BRICs and such already moving at least a 5 years).


Cheers.

Loading mentions Retweet
Filed under  //  training   treinamentos   zend  

Comments (1)

Feb 16 / 6:21am

Zend Framework Tutorial Series - Capítulo 2

Tudo bem?

Demorou um pouco para eu publicar este capítulo pois infelizmente eu tive alguns contratempos nas últimas semanas, mas de qualquer forma, é muito bom saber que você se interessou por esta série de tutoriais e voltou para continuar implementando um sistema de exemplo.

Recapitulando

No primeiro capítulo desta série eu mostrei como configurar o seu ambiente de desenvolvimento para utilizar o Zend Framework com o Zend_Tool.

        Reveja o Capítulo 1 do tutorial.

Uma observação importante: Eu estou utilizando a versão 1.10 do Zend Framework. Certifique-se que você também esteja utilizando esta mesma versão para melhor aproveitamento do tutorial. Mantenha sua estrutura atualizada, ok?

Model, View, Controller

O Zend Framework utiliza o pattern MVC, que permite que as camadas das aplicações sejam separadas em camadas.

Basicamente, as camadas do MVC são 3: Model (Modelo), View (Visão) e Controller (Controle) e cada uma dessas camadas devem implementar especificamente aquilo que diz respeito à funcionalidade em questão; Mas você deve estar se perguntando: "WTF esse cara tá falando? Até agora ele falou, falou e falou mas não disse diretamente o que é o Model, o View e nem o Controller". E eu responderia: "Relaxa... , vou falar sobre isso agora.".

Enfim, Vamos lá:

  • A camada de modelo é onde nós implementamos a lógica de negócios, acesso a tabelas e banco de dados e a manipulação direta (INSERT, UPDATE, DELETE) desses dados.
  • A camada de visão é aquela onde nós recebemos informação fornecida pelo usuário e também onde nós mostramos informações ao usuário proveniente da camada de modelo por exemplo.
  • A camada de controle é a camada que nós usamos para unir os dados das duas camadas citadas anteriormente. Por exemplo: No controller nós podemos trabalhar com dados provenientes do modelo, prepara-lo e em seguida passa-los para a view que apresentará estas informações ao usuário; Nós podemos também por meio do controller, receber informações da camada de visão e passa-las à camada de modelo. Eu costumo dizer que esta camada trabalha como uma espécie de atravessador.
Não é minha intenção e nem pretensão falar tudo sobre MVC aqui e sim somente aquilo que é necessário para que você possa implementar uma aplicação utilizando este pattern em conjunto com o Zend Framework e mostrar como este framework o implementa.

Caso você queira saber mais sobre MVC siga os links abaixo:


O MVC com Zend Framework

Eu prefiro mostrar como este padrão é implementado no Zend Framework na prática pois este é meu jeito e é isso que pretendo fazer neste tutorial, então, neste capítulo, sempre que eu for trabalhar com uma das camadas eu vou deixar isso bem explícito.

Será implementado algum projeto neste Tutorial?

Sim e como já existem vários tutoriais por aí que implementam Blog, Agenda, etc, nós implementaremos um sistema básico de contas a pagar utilizando o SQLite como SGBD.

O que será mostrado neste capítulo?

Neste capítulo eu mostrarei como implementar os controllers e as views dentro da estrutura do Zend Framework.

Após este capítulo você irá:
  • Entender o conceito de MVC aplicado ao Zend Framework.
  • Criar Controllers, Actions e Views usando Zend Framework.
Estrutura de uma aplicação

No Zend Framework o fluxo de uma aplicação é determinado pelo controller, qualquer tipo de request, desde um request para mostrar um formulário na tela até um request AJAX é definido em nosso controller e isso se dá por meio das Actions.

Imagine uma aplicação padrão PHP (daquelas antigas, macarrônicas), onde o fluxo da aplicação é determinado por arquivos PHP distintos. Por exemplo:
  • form_incluir_usuario.php -> Form de inclusão de usuários
  • incluir_usuario.php -> Incluir usuário
  • form_alterar_usuario.php -> Form de alteração de usuários
  • alterar_usuario.php -> Alterar usuário
  • excluir_usuario.php -> Excluir usuário
  • listar_usuarios.php -> Listar usuários
Com Zend Framework as coisas não são mais feitas assim pois ele é um framework orientado a objetos e este fluxo é definido nas classes de controller, ou seja, seguindo a mesma idéia do exemplo acima de cadastro de usuários, um controller do Zend Framework poderia ser mais ou menos assim:
  • formAction -> Tela com formulário para inclusão e alteração de dados de usuário
  • saveAction -> Realiza os procedimentos necessários para salvar um usuário
  • deleteAction -> Exclui usuário
  • indexAction -> Tela padrão que neste caso mostrará a listagem de usuários cadastrados.
Além de organizarmos melhor o código utilizando Actions Controllers, nós também podemos manter nossas URLs mais organizadas e de fácil leitura pois o Zend Framework implementa o conceito de URLs amigáveis então com o ZF é raro (digo raro porque já vi isso ocorrer) de se ver URLs como por exemplo: http://meusite.com/users.php?operacao=Alterar&id=10; Com o Zend Framework, esta URL seria mais ou menos assim: http://meusite.com/users/alterar/id/10 e ela indica que: Será feita uma requisição HTTP para o controller users (UsersController) mais especificamente para a action alterarAction e serão passados parâmetros via method GET, neste caso o parâmetro chama-se id e seu valor é 10.

Depois de se acostumar com esse padrão você provavelmente nunca mais irá desejar usar a forma de Query String antiga novamente. 

Revendo a estrutura da aplicação

Quando nós criamos a estrutura do nosso projeto no capítulo 1, o Zend_Tool criou dentro do diretório application/controllers um arquivo PHP chamado IndexController.php; Este arquivo é criado automaticamente pois ele funciona como o controller de entrada da aplicação; Se fizermos uma comparação novamente com aquela estrutura de desenvolvimento mais antiga, o IndexController funcionaria como o index.php de uma aplicação ou seja, sempre que a URL do sistema/site for chamada sem informar uma tela específica, o sistemá apontará para a tela padrão do sistema.

No Controller nós também podemos ter uma ação padrão, ou seja, sempre que o controller for chamado sem especificar qual ação deve ser executada, a ação padrão será chamada; Esta ação é chamada de indexAction.

Segue abaixo o conteúdo do arquivo IndexController.php que foi gerado pelo Zend_Tool:

<?php

class IndexController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body
    }

}

A primeira coisa que observamos é que o nome da classe é exatamente igual ao nome do arquivo (excluíndo o sufixo .php) e isso é uma regra. 
Outro ponto importante no nome do arquivo e consequentemente da classe é que ele segue a convenção que o nome inicia com a primeira letra maiúscula e as demais minúsculas, se houver nomes compostos o segundo nome inicia com a letra maiúscula e as demais seguem minúsculas.

Nesta classe nós também podemos observar que ela vem com dois métodos: init e indexAction; O método init funciona como um método construtor que nesta classe não é utilizado pois ele é implementado na superclasse e recebe parâmetros diversos que seriam bem complicados de serem passados por nós na subclasse, então quando for necessário executar algum procedimento no ato da criação da instância do controller, este procedimento deverá encontrar-se no método init.

O método indexAction por sua vez é a ação padrão deste controller e será executado sempre que o IndexController for solicitado sem explicitar nenhuma action.
Outra coisa que também fica bem clara no código é que todo método que for uma action deve ter Action logo após o nome do action ou seja, se você em algum controller quisesse ter uma action chamada farofa, o nome dela na classe seria farofaAction.

Nas actions nós também devemos seguir a convenção camel case da mesma forma que o nome da classe só que o nome do método sempre inicia com letra minúscula.

Para conhecer mais os padrões e convenções do Zend Framework, siga este link: http://framework.zend.com/manual/en/coding-standard.html

View Templates

Como vimos anteriormente, actions podem (e são na maioria dos casos) se relacionar a telas do nosso projeto, para isso nós temos que ter uma view template correspondente para que possa ser renderizada e apresentada na tela para o usuário.

Estas templates encontram-se no diretório applications/views/scripts e as templates são agrupadas de acordo com o controller ao qual se relacionam então, dentro do diretório scripts haverão diretórios com os nomes dos controllers, por exemplo, index e dentro deste serão armazenados os arquivos de template; Cada arquivo possui o nome do action em questão, então o nosso indexAction está representado lá como index.phtml e se tivéssemos criado o farofaAction, o arquivo seria farofa.phtml.

Outro ponto importante é que todos os templates possuem o sufixo phtml.  Isso pode ser modificado mas a princípio nós deixaremos assim.

Criando o UsersController


Da mesma forma que nós usamos o Zend_Tool para criarmos o projeto nós o usaremos para criar o nosso primeiro controller. Para isso basta digitar em seu terminal/prompt do DOS:

zf create controller users

Após executar este comando, o resultado será parecido com o trecho abaixo:

Creating a controller at /usr/local/zend/apache2/htdocs/zf-series/application/controllers/UsersController.php
Creating an index action method in controller Users
Creating a view script for the index action method at /usr/local/zend/apache2/htdocs/zf-series/application/views/scripts/users/index.phtml
Creating a controller test file at /usr/local/zend/apache2/htdocs/zf-series/tests/application/controllers/UsersControllerTest.php
Updating project profile '/usr/local/zend/apache2/htdocs/zf-series/.zfproject.xml'

Pronto! Nosso novo controller está criado, o nome dele é UsersController.php e ele também implementou para nós o indexAction e seu template. Dê uma olhada nos diretórios para você ver a mágica.

Execute em seu browser: http://zf-series/users e veja o resultado. Veja se foi algo parecido com a figura abaixo. Bacana né?
Se você visualizar o código deste controller você verá que ele tem a estrutura idêntica à do IndexController.

Como exercício, edite o arquivo de template index.phtml que está em application/views/scripts/users e coloque uma frase que te agrade lá. O meu ficou assim:


Agora, vamos fazer mais uma alteração no nosso action. Altere ele para ficar assim (Coloquei todo o código do controller para facilitar): 

<?php

class UsersController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body
$this->view->minhaFrase = "Os programadores são a Elite da TI";
    }

}
No Controller nós temos acesso ao objeto Zend_View que é responsável pela camada de visão no Zend Framework e no objeto Zend_View nós adicionamos um atributo chamado minhaFrase que recebeu a frase que eu tinha colocado manualmente no template anteriormente.
Como nós estamos atribuindo este valor a uma propriedade do objeto de visão, nós poderemos utilizar este objeto na camada de visão e daí nós substituiremos o valor fixo pelo valor informado pelo controller. Vamos editar então o template index.phtml do controller UsersController:

<br /><br /><center><?php echo $this->minhaFrase ?></center>

Pronto. Como nós estamos acessando o objeto diretamente da view, então basta manipularmos o atributo minhaFrase que criamos quando estávamos no controller diretamente usando $this. 

Simples demais não é? 

Como exercício, crie mais alguns desses atributos na action em seu controller e mostre os valores em sua view. Beleza?

Criando um Layout com Zend_Layout

Quando nós desenvolvemos sites/sistemas web com PHP nós costumamos usar código que se repete por meio de includes não é mesmo? Dessa forma se um dia essas informações precisarem ser modificadas nós modificamos em apenas um local.

O Zend Framework nos provê um componente para facilitar este trabalho e eu digo facilitar porque ele vai nos poupar até mesmo o trabalho de ter de realizar o include dos arquivos que devem ser reaproveitados. 

Um caso bem comum é criarmos um arquivo chamado header.php (ou cabecalho.php) e outro chamado footer.php (ou rodape.php) e inclui-los em todas as páginas, certo? Bom, nós criaremos um layout com estas informações e todas as nossas telas serão mescladas com este layout e em seguida apresentado na tela para o usuário.

Vamos lá? Adivinha o que iremos usar agora? Acertou, o Zend_Tool.

Execute o seguinte comando em seu terminal/prompt do DOS:

zf enable layout

O resultado é o seguinte:

Layouts have been enabled, and a default layout created at /usr/local/zend/apache2/htdocs/zf-series/application/layouts/scripts/layout.phtml
A layout entry has been added to the application config file.

Isso tudo é muito lindo :D

Bom, vamos editar o arquivo que foi gerado em application/layouts/scripts/layout.phtml para deixa-lo mais ou menos assim:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Zend Framework Tutorial Series</title>
    <meta name="generator" content="TextMate http://macromates.com/">
    <meta name="author" content="Adler  Medrado">
    <!-- Date: 2010-02-15 -->
</head>
<body>
    <div id="header">
        <h1>Zend Framework Tutorial Series</h1>
    </div>
    <div id="content">
        <p>Este é o layout do nosso sistema. Em breve nós iremos modifica-lo.</p>
        <?php echo $this->layout()->content; ?>
    </div>
    <div id="footer">
        <p>&copy; 2010 - Adler Medrado - http://adlermedrado.com.br</p>
    </div>
</body>
</html>

No nosso layout nós definimos uma mensagem de título que está no header e uma mensagem de copyright no footer. Se você analisar bem este código, você verá que é feita uma chamada a um método chamado layout(); Este método é na verdade um Zend_View_Helper que faz a mesclagem do template do action que é executado no momento do request com o restante do layout. 

Não se preocupe com o Zend_View_Helper pois em outros capítulos nós abordaremos justamente este recurso.

Simples o uso do layout né? Como exercício, execute novamente http://zf-series/users e veja o resultado.

Considerações Finais

Neste capítulo nós abordamos um pouco do C e do V (Controllers e Views) do MVC. 
No próximo capítulo nós trabalharemos com formulários, filtraremos input, trataremos saídas e algumas cositas mas. 

Espero que você tenha aproveitado este capítulo e espero também reve-lo no próximo.

A propósito, eu criei um grupo de discussão no Google Groups para que aqueles que estão seguindo a série de tutoriais possam discutir os exercícios. Caso você deseje participar deste grupo basta inscrever-se em: http://groups.google.com/group/zend-framework-series-br

Os fontes do tutorial encontram-se no github. Acesse: http://github.com/adlermedrado/Zend-Framework-Tutorial-Series

Abraços e até o próximo capítulo.
Loading mentions Retweet
Filed under  //  framework   php   zend   zfseries  

Comments (13)

Feb 1 / 4:13pm

GnuPG no Mac OS X Snow Leopard

Desde que comprei meu mac e instalei o Snow Leopard no ano passado, eu busquei alguma forma de instalar o GPG integrado ao cliente de email "Mail" que vem com o Mac OS X, mas estava complicado porque a versão do Mail que vem com o Snow Leopard não suporta o GPGMail que é um bundle para o Mail que permite que esta integração seja feita. 

Hoje, senti necessidade novamente em criptografar meus emails utilizando GPG e por isso fui atrás de uma solução para o problema supracitado e desta vez eu encontrei um tutorial bacana que me permitiu fazer esta integração. 
Aproveitei e criei um par de chaves novos que podem ser encontrados nesta URL: http://pgp.mit.edu:11371/pks/lookup?op=vindex&search=0x70EA7D5FE17CA732
Grande abraço.
Loading mentions Retweet

Comments (0)

Jan 28 / 3:10am

Zend Framework 1.10.0 STABLE Released

Ontem eu recebi um email pela lista geral do Zend Framework que informava o lançamento da release 1.10 Stable do Zend Framework.

Foram adicionados diversos novos recursos, entre eles, o Zend_Oauth o qual me deixou excitado e vou fazer alguns testes logo logo. Houve também o aperfeiçoamento do Zend_Tool e isso me deixou bastante animado pois tenho trabalhado com ele e gostado bastante; Hoje iniciarei os testes com ele usando no meu dia-a-dia.

Abaixo segue o trecho do texto que fala sobre as mudanças no Zend_Tool:

Zend_Tool was refactored to eliminate issues and bottlenecks, as well as to add a number of new features:

 * New CLI runner with home directory and configuration support
 * New providers for Model generation, DbAdapter setup, Layouts and Form Generation
 * Default project structure comes with logging support in the ErrorController

  Copiei este texto do email enviado à lista e ele pode ser lido na íntegra aqui: http://n4.nabble.com/Zend-Framework-1-10-0-STABLE-Released-td1312021.html#a1312021

Abraços.

Loading mentions Retweet
Filed under  //  php zend framework  

Comments (0)

Jan 24 / 12:40pm

Socialite - Cliente de Mídias sociais para Mac.

Testei durante alguns dias o Socialite que é um software que nos permite utilizar diversas apps da chamada "Social Media" como Twitter, Flickr, Facebook, Digg e Google Reader.

Ele ainda permite, caso o usuário não utilize o Google Reader, agregar RSS individualmente. 

Achei ele bem bacana e o preço de US$20 vale a pena.

Todos os recursos que utilizo nos clientes mais comuns para twitter eu tenho disponíveis no socialite. Ele não ficou devendo nada para o Tweetie, Nambu e TweetDeck que eram os que eu costumava usar.

Em relação ao facebook ele mostra os últimos status de seus contatos bem como os últimos uploads de fotos. Ele também permite atualizar nosso status de forma bem simples.

Em relação ao Digg e ao Google Reader, ele mostra as últimas atualizações de notícias bem como ler os posts pelo próprio programa.

Para finalizar, o suporte ao flickr só ficou devendo o upload de fotos mas, em contrapartida, as recomendações de fotos que ele nos oferece são bem bacanas.

Enfim, para quem é heavy user em mídias sociais e utiliza a plataforma mac, o Socialite é uma ótima opção; Até agora, em minha humilde opinião, a melhor.

Mencionei que estava escrevendo este post no twitter e logo recebi um Reply de um cara que entende do assunto:

Abraços.

 

 

 

   
Click here to download:
Socialite_-_Cliente_de_Mdias_s.zip (822 KB)

Loading mentions Retweet
Filed under  //  client   mac   twitter  

Comments (0)

Jan 19 / 3:57pm

Zend Framework Tutorial Series - Capítulo 1

Estou iniciando uma série de tutoriais sobre Zend Framework onde eu pretendo mostrar desde os conceitos básicos até os avançados.

Tentarei colocar um novo capítulo semanalmente, desta forma teremos uma janela boa para praticar o conteúdo proposto.

Este primeiro Tutorial da série visa demonstrar a instalação e configuração do ambiente bem como criar a estrutura de diretórios de uma aplicação utilizando o Zend_Tool.

Antes de mais nada, os pré-requisitos para continuar este tutorial são:

1- Conhecimento de PHP utilizando os conceitos de Orientação a Objetos.
2- Configuração do ambiente (Apache, PHP, etc).
3- Domínio do Sistema Operacional que está utilizando.

IMPORTANTE: Caso você não possua este conhecimento eu sugiro que não continue com este tutorial e sim busque conhecer estes pré-requisitos.

Eu vou partir do princípio que você já possui o ambiente pra rodar PHP instalado em sua máquina, ok? 

Vamos lá!
  • Após terminar de ler este capítulo da série você estará apto a:
  • Configurar variáveis de ambiente do sistema operacional
  • Configurar domínios virtuais no apache
  • Configurar o sistema operacional para lidar com hosts locais
  • Criar a estrutura de diretórios de uma aplicação escrita em Zend Framework utilizando o Zend_Tool

BAIXANDO O ZEND_FRAMEWORK E CONFIGURANDO O AMBIENTE

Primeiramente, baixe o Zend Framework em: http://framework.zend.com/

Descompacte o conteúdo deste pacote no local que você desejar e inclua o conteúdo da pasta library no include_path do seu ambiente PHP.

Para setar o include_path você deverá alterar seu php.ini conforme orientações nesse link (http://www.php.net/manual/en/ini.core.php#ini.include-path).

Beleza!!! Agora vamos colocar o script do Zend_Tool no PATH do sistema operacional.

No Mac, eu editei o arquivo .bash_profile que se encontra no meu diretório home e coloquei o seguinte:
export PATH=~/bin:/usr/local/bin:/Users/adlermedrado/dev/share/zf/bin:$PATH onde /Users/adlermedrado/dev/share/zf é o local onde eu coloquei o conteúdo do arquivo que baixamos do site http://framework.zend.com e /bin é onde se encontram os scripts do Zend_Tool.

Em ambientes Windows, você deve ir no Painel de Controle->Sistema->Avançado->Variáveis de Ambiente e na variável PATH (Se ela não existir, crie) colocar o caminho do local onde você descompactou o Zend Framework até o diretório bin. 

IMPORTANTE: Eu coloquei essa configuração do Windows conforme lembrei de cabeça. Caso haja algum erro me desculpem, pois, eu não tenho nenhuma máquina windows aqui para verificar se o que falei está 100%.

Ok. Com as variáveis de ambiente configuradas, abra uma janela do terminal e digite o seguinte: zf.bat (windows) e zf.sh (*nix).

Se aparecer o help com uma listagem de comandos , está tudo certo. Caso o resultado seja uma mensagem de comando não existente ou algo parecido, verifique a variável PATH do seu sistema operacional. (Veja Figura 1)

CRIANDO A ESTRUTURA DA APLICAÇÃO

Agora que o Zend_Tool está acessível da linha de comando, vamos criar a estrutura de nosso projeto.

O Zend_Tool é uma aplicação que roda na linha de comando (CLI) que nos facilita a criação de projetos com Zend Framework. 

Com ele nós po demos criar o projeto, controllers, actions, etc; Não precisa se preocupar pois veremos os comandos do Zend_Tool detalhadamente nos próximos capítulos.

A seguir você poderá criar a estrutura de um projeto. Preparado? 

No diretório de sua escolha (aqui na minha máquina eu escolhi: /Users/adlermedrado/Sites/zf-series) digite o seguinte comando:
zf.sh create project zf-series (Lembre-se que em windows o comando é zf.bat ou somente zf).

Este comando criará a estrutura de diretórios necessária para uma aplicação com Zend Framework. (Veja Figura 2)

Você viu que dentro do diretório zf_series foram criados diversos diretórios mas nós entraremos em detalhes nesses diretórios conforme formos avançando nos tutoriais com excessão do diretório public o qual falaremos agora.

O diretório public é o diretório público da aplicação (duh!)  ou seja, neste diretório nós colocaremos os arquivos de imagens, javascript, CSS, etc. Este diretório será nosso DocumentRoot e como tal deve ser configurado no apache.

Os demais diretórios são da aplicação e não precisam ser acessados pela URL por intermédio do servidor web e isso nos dá uma segurança maior pois os arquivos com regras de negócio, configurações de conexão com banco de dados, etc, não precisam ser acessados pela URL para serem compilados e interpretados pelo PHP então, desta forma nós garantimos que serão acessívels pelo público somente arquivos de pouca importância (no sentido de segurança) como CSS, imagens e afins.

Como esta pasta é o DocumentRoot, nós devemos criar um domínio virtual para este projeto;  Nós faremos isso configurando o servidor web Apache Httpd.

CONFIGURANDO O SERVIDOR WEB

No diretório onde meu Apache está instalado eu tenho um arquivo chamado extras/httpd_vhosts.conf e será nele que adicionarei o domínio virtual para nossa aplicação.

Neste arquivo eu criei o meu virtual host da seguinte forma:

<VirtualHost *:80>
    ServerAdmin adlermedrado@gmail.com
    DocumentRoot "/Users/adlermedrado/Sites/zf-series/public"
    ServerName zf-series
    ServerAlias zf-series
    ErrorLog "/private/var/log/apache2/zf-series-error_log"
    CustomLog "/private/var/log/apache2/zf-series-access_log" common

<Directory "/Users/adlermedrado/Sites/zf-series/public">
  Options Includes FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

</VirtualHost> 

O próximo passo é configurar seu Sistema Operacional para que ele saiba que o endereço zf-series se encontra no domínio virtual definido acima.

Em meu Mac eu editei o arquivo /etc/hosts e ele ficou da seguinte forma:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost

# Meus dominios locais
127.0.0.1 zf-series

Em um ambiente Windows você deve editar o arquivo C:\Windows\System32\drivers\etc\hosts e a edição dele é igual a do meu exemplo acima.

TESTANDO O AMBIENTE

Se nossas configurações forem bem sucedidas, se nós digitarmos em um browser a URL http://zf-series ela será direcionada para o index de nossa aplicação; 

Se for mostrada uma tela de boas-vindas ao Zend Framework, a configuração foi realizada com sucesso. (Veja Figura 3).

Caso não funcione da forma correta, revise a configuração do domínio virtual e da configuração do DNS (hosts);

CONFIGURAÇÕES FINAIS

Este primeiro capítudo da nossa série termina por aqui. 
No próximo eu entrarei em detalhes na estrutura de pastas criada pelo Zend_Tool e na estrutura MVC do Zend Framework; Nesta ocasião criaremos nosso primeiro controller e suas actions.

Espero que este tutorial seja útil para você.
Não esqueça de dar seu feedback. Ele é muito importante para os próximos capítulos da série.

Abraço.
Loading mentions Retweet
Filed under  //  framework   tutorial   zend   zfseries  

Comments (13)

Jan 17 / 4:32am

Porque os profissionais devem participar de treinamentos?

É comum eu receber emails ou DMs no twitter perguntando se vale a pena participar de um treinamento ou não e a minha resposta semrpre é sim. 

Vou tentar em poucas palavras expor os motivos que me levam a sempre dar esta resposta.

Investimento

Um treinamento deve sempre ser visto pela perspectiva de que ele é um investimento pois com o passar do tempo o conhecimento adquirido certamente irá reembolsa-lo de todos os custos.

Conhecimento nunca é demais e não tem preço.

Experiência

Quando você participa de um treinamento você pode absorver bastante experiência passada pelo instrutor. 

Problemas que ele encontrou em algum momento de sua carreira podem ser evitados NA SUA pois a experiência dele foi repassada para você.

Um bom instrutor sempre mostra os melhores caminhos que devem ser seguidos e sempre tentar passar um pouco daquilo que já vivenciou em sua carreira aos treinandos.

Networking

Quando você participa de um treinamento você passa a ter um relacionamento com outras pessoas que como você, buscam ampliar seu conhecimento. 

Mantendo este relacionamento ativo você pode ter acesso a oportunidades de emprego, você pode adquirir outros tipos de conhecimento pois a maioria dos treinandos sempre possuem conhecimentos em outras áreas e claro, você pode fazer novos amigos.

Logo, além de ampliar seu conhecimento você amplia seu leque de relacionamentos e os benefícios disso são óbvios.

Como encontrar um bom treinamento?

    • Referências
      • Empresa
        • Busque referências da empresa que está fornecendo treinamento e certifique-se que ela possui o compromisso em oferecer treinamentos de qualidade.
      • Instrutor
        • Da mesma forma que você buscou referências da empresa, busque do instrutor; Verifique com outras pessoas que já participaram de treinamentos ministrados por ele se ele possui domínio do assunto proposto, se ele repassa experiência, se ele é comprometido com o treinamento, se possui uma didática boa, etc. 
      • Ementa do Treinamento
        • Verifique se a ementa proposta para o treinamento inclui aquilo que você deseja aprender. Se a ementa do treinamento não for oferecida a você, tenha um pé atrás com a empresa e se a ementa não incluir o que você realmente se interessa, procure pelo treinamento em outra.
        • Um bom treinamento é aquele que é voltado para o mercado.
    • Pré-Requisitos
      • Um treinamento será muito bem aproveitado caso o treinando possua os pré-requisitos necessários para participar do treinamento, portanto, verifique antes de se matricular se você possui os pré-requisitos necessários para participar, caso contrário, por mais que o treinamento seja excelente você pode não obter o resultado esperado.

Considerações Finais

Tentei expor em um texto pequeno a minha visão em relação a este assunto. 

Obviamente não levei em conta aqui aquelas pessoas que são auto-didatas pois estas são excepcionais; De qualquer forma, pessoas auto-didatas, ao meu ver, também devem participar de treinamentos pois os aspectos networking e experiência também irão acrescentar muito à carreira delas.

Um abraço.
Loading mentions Retweet
Filed under  //  carreira   treinamento  

Comments (3)

Jan 13 / 7:22am

Ruby on Rails + JQuery

English translation is below 

Quando comecei a utilizar Ruby on Rails uma das primeiras coisas que eu procurei saber foi como substituir o Prototype e Script.aculo.us que são as libs padrão para utilizar javascript pelo JQuery.

Decidi fazer isso não pelo fato de achar o Prototype e Script.aculo.us ruins mas, pelo fato de a muito tempo eu já utilizar o JQuery nas aplicações web que desenvolvo e com isso ter uma boa experiência com ele e também por gostar muito deste framework javascript.

O Rails possui diversos helpers que tornam o desenvolvimento com ajax muito simples, porém, todos os helpers utilizam o framework prototype em conjunto com scrip.taculo.us e aí que entra um plugin que me poupou muito trabalho pois ele já faz a integração do JQuery com os helpers do Ruby on Rails ou seja, a mudança é feita de uma maneira tão transparente que até assusta :) pois normalmente este tipo de coisa não são tão simples.

Bem, para instalar o plugin basta executar o seguinte comando de dentro do diretório da sua app rails:
script/plugin install git://github.com/aaronchi/jrails.git

A partir deste momento sua aplicação já está integrada com o JQuery e os helpers passarão a utilizar o JQuery em vez de Prototype e para componentes de UI serão utilizados os componentes do JQuery UI.

Para importar todos os arquivos JS relacionados ao JQuery e aos helpers para sua aplicação, faça isso:
<%= javascript_include_tag :defaults %>

Você pode obter maiores informações neste site.

In English 

When I started using Ruby on Rails one of the first things I wanted to know was how to replace the Prototype and Script.aculo.us libs because it is the standard for javascript and ajax to JQuery.

I decided to do this not because i think the Prototype and Script.aculo.us are poor, bad or something but because of the long time i'm already using JQuery in web applications and have a good experience with it and also really like this javascript framework.

Rails has many helpers that make developing with Ajax very simple, however, all helpers are using the prototype framework in conjunction with scrip.taculo.us by default and at this point i knew a plugin that has saved me a lot of work because he makes the integration of jQuery helpers with Ruby on Rails, the change was so clear that it really scared me :) because usually this kind of changes is not so simple.

Well, to install the plugin simply run the following command from within the directory of your rails app:
script/plugin install git://github.com/aaronchi/jrails.git

From this moment your application is already integrated with JQuery and all helpers will use JQuery instead of Prototype and UI components will use JQuery UI components.

To import all JQuery and Helpers Javascripts into your app justo do it:
<%= javascript_include_tag :defaults %>

You can get more info here.

Loading mentions Retweet
Filed under  //  jquery   prototype   rails   ruby   script.aculo.us  

Comments (2)

Jan 10 / 6:06am

Paginação fácil com Rails: will_paginate

English translation is below

INTRODUÇÃO

Uma coisa simples mas normalmente chata de se fazer na mão é a paginação de conteúdo, mas a maioria dos frameworks para desenvolvimento, independente da linguagem em que foi escrito conta com algum componente responsável por esta funcionalidade que apesar de simples ninguém gosta de escrever na mão do zero.

Eu já falei sobre o Zend_Paginator a bastante tempo atrás e você pode ver aqui e hoje vou falar sobre um componente que realiza o mesmo trabalho só que no framework Ruby on Rails.

will_paginate

Existem vários plugins para paginação no Rails mas daqueles que eu testei, este foi o que achei o mais simples de usar.

O código dele está disponibilizado no github e pode ser utilizado como gem, plugin ou por meio de um tarball que é disponibilizado para download.

A instalação dele é bem simples e como gem pode ser feita da seguinte forma:

gem install will_paginate

Para instalar como plugin:

script/plugin install git://github.com/mislav/will_paginate.git

Pronto! Agora vou mostrar como utilizar.
Supondo que você tenha uma model chamada User e queira paginar o conteúdo retornado da tabela Users, você invoca o método paginate informando a página atual e a quantidade de registros por página. 
Caso queira incluir condições em sua consulta, você pode fazer normalmente como se faz em qualquer consulta utilizando uma model gerada pelo rails, o código abaixo demonstra esta situação:

@users = User.paginate :page => params[:page], :per_page => 10, :conditions => ["status = :active", {:active => 'A'}]

Na view nós devemos incluir o trecho de código que monta os botões/links de paginação:

<%= will_paginate @users %>

CONSIDERAÇÕES FINAIS

Existem outros recursos deste plugin que podem ser explorados por exemplo, mudar o layout do controle de paginação porém, não irei aborda-los aqui neste post porque minha intenção é sempre ser o mais breve e simples possível. 

Para maiores informações, dê uma olhada na página deste componente no github: http://github.com/mislav/will_paginate

Abraço!!! 

In English

INTRODUCTION

A simple thing but usually boring to do by the hand is the content pagination, but in most frameworks for development, regardless of what language it was written has some component responsible for this feature that although simple one likes to write from scratch.

I've talked about the Zend_Paginator a long time ago as you can see (brazilian portuguese only) here, and  today and I will talk about a component that performs the same job but in the Ruby on Rails framework.

will_paginate

There are several plugins for pagination in Rails but of those I tested, this was what I found the simplest to use.

The code it is available on github and can be used as a gem, plugin or through a tarball that is available for download.

The installation is pretty simple and as gem can be made as follows:

gem install will_paginate

Plugin Installation:

script/plugin install git://github.com/mislav/will_paginate.git

Ready! Now I'll show how to use.

Assuming you have a model called User and you want to paginate the content returned from the Users table, you invoke the method paginate informing the current page and number of records per page.
If you want to include conditions in your query, you can usually do as is done in any query using a model generated by the rails, the code below demonstrates this:

@users = User.paginate :page => params[:page], :per_page => 10, :conditions => ["status = :active", {:active => 'A'}]

In the view we need to include the code snippet that create the buttons/links pagination.

<%= will_paginate @users %>

FINAL THOUGHTS

There are other features of this plugin that can be exploited,  for example,  change the layout of the pager control but i will not address them here in this post because my intention is to always be as short and simple as possible.

For more information, check out the page of this component on github: http://github.com/mislav/will_paginate

Cheers.
Loading mentions Retweet
Filed under  //  rails   ruby  

Comments (0)