Desativando o layout no Zend Framework 2

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Tutorial adaptado do original escrito por EvanDotPro: http://blog.evan.pro/disabling-the-layout-in-zend-framework-2

As vezes você precisa desativar o layout para uma ação específica. Para fazer isso, simplesmente configure a sua View Model da sua ação para retornar como “terminal”. Isso fará com que o ZF2 não envolva o conteúdo na view em um layout.

[php]<?php

namespace Application\Controller;

use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\ViewModel;

class IndexController extends ActionController
{
public function nolayoutAction()
{
// Turn off the layout, i.e. only render the view script.
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
}
}[/php]

Mais exemplos podem ser encontrados na excelente ZF2TestApp do Rob Allen.

PHPit te leva à PHP Conference Brasil 2012

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Você tem sorte? Então tá na hora de colocar essa sorte à prova! O PHPit irá sortear dois ingressos SILVER para a PHP Conference Brasil 2012. Deu vontade? Então saiba como conseguir:

  • Um ingresso será sorteado pelo Twitter do PHPit para quem der RT no tweet mencionado;
  • Um ingresso será sorteado pelo Facebook para quem compartilhar a imagem mencionada;

Lembrando que para quem participar pelo Facebook, só poderão ser contados os compartilhamentos de quem tiver o mural aberto (caso contrário não é possível listar). Também é importante tomar cuidado para compartilhar a imagem original, e não apenas reenviá-la ao seu mural. Os dois sorteios serão realizados no dia 06/11/2012 às 13h.
O vencedor da promoção deve enviar um email para rafael@phpit.com.br ainda no mesmo dia.

O ingresso só é válido até 07/11/2012.

Primeiro será feito o sorteio do Twitter e em seguida do Facebook. Caso a mesma pessoa seja sorteada em ambos os certames, o segundo sorteio será efetuado novamente.

Promoção no Twitter
Promoção no Facebook

Boa sorte a todos e nos vemos lá!

PHPit na PHP Conference Brasil 2012

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

PHP Conference 2012

Fala, meu povo! Tudo na santa paz?

Estou aqui hoje para convidá-los a participar da PHP Conference 2012. Para aqueles que não sabem, este é o principal evento de PHP da América Latina! Serão quatro dias (29/11 a 02/12) de puro networking e troca de experiências! O evento acontecerá na UNIFIEO em Osasco – SP (mais informações aqui).

Eu estarei presente apresentando duas palestras:

Se você ainda não se inscreveu, corre que dá tempo (corre mesmo, porque o valor da inscrição vai subindo)!

Haverá cursos hands on e uma infinidade de palestras.

Espero que possamos trocar uma ideia e tomar um café! :)

Nos vemos lá, então!

Um abraço a todos e fiquem com Deus.

Zend Framework

Iniciando com Zend Framework 2: Skeleton e ZfcUser

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Este é um tutorial feito para ser curto e fácil de seguir para lhe ajudar a começar com o Zend Framework 2.0 e um dos seus módulos mais comuns, o ZfcUser. Ao final deste tutorial você terá uma aplicação básica no ZF2 com registro de usuário e autenticação.

Pré-requisitos

Para este tutorial presumo que você tenha instalado:

  • PHP 5.3.3+ (com pdo-sqlite ou pdo-mysql)
  • Um web server e conhecimentos de como configurar um virtual host
  • Git (ou pelo menos a capacidade de acessar o Github e baixar o zip do projeto, o que vai te obrigar a baixar o framework de outro source e colocar no diretório apropriado)
(De qualquer forma, posso dar uma mão pra galera que estiver com dificuldades em alguma dessas partes. Basta postar nos comentários!)

Se você tiver o PHP 5.4+, tecnicamente nem precisará de um web server pra testar o Zend Framework 2, uma vez que você pode simplesmente utilizar o novo servidor para desenvolvimento embutido no PHP.

Um comentário sobre o composer

Enquanto o composer é uma maneira suportada de configurar o skeleton, eu prefiro simplesmente utilizar o git para esse tutorial. Na minha opinião isso torna as coisas mais simples e fáceis de debugar caso alguém tenha problemas em seguir o tutorial.

Passo 1: Obtendo o Skeleton do Zend Framework

O primeiro passo é clonar o skeleton application:

[user@workstation workspace]$ git clone --recursive https://github.com/zendframework/ZendSkeletonApplication.git

Depois, configure um vhost apontando para o diretório público da sua novo skeleton clonado. Neste ponto você já deve ser capaz de acessar http://seuvhost/ no seu navegador e ver o seguinte:

Se você estiver utilizando o PHP 5.4 e quiser utilizar o servidor embutido, simplesmente abra um novo terminal, cd para o diretório public e execute:

[user@workstation public]$ php -S 8000

Com isso rodando você deverá ser capaz de acessar http://localhost:8000/ e visualizar a aplicação.

Passo 2: Configurando uma conexão com o banco de dados

Para o ZfcUser iremos necessitar de um banco de dados para guardar os usuários. Neste tutorial irei cobrir o MySQL e o SQLite, mas com o ZfcUser e o Zend\Db suportam muitos outros SGBDs.

Crie um novo arquivo ./config/autoload/database.local.php e preencha-o com o seguinte:

Para o MySQL:

<?php
return array(
  'service_manager' => array(
    'factories' => array(
      'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
    ),
  ),
  'db' => array(
    'driver' => 'pdo',
    'dsn' => 'mysql:dbname=CHANGEME;host=localhost',
    'username' => 'CHANGEME',
    'password' => 'CHANGEME',
  ),
);

Ou para o SQLite:

<?php
return array(
  'service_manager' => array(
    'factories' => array(
      'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
    ),
  ),
  'db' => array(
    'driver' => 'pdo',
    'dsn' => 'sqlite:' . getcwd() . '/data/users.db',
  ),
);

Passo 3: Instalando o ZfcUser

Agora vamos instalar o ZfcUser. Primeiro cd para o diretório vendor e execute os seguintes comandos:

[user@workstation vendor]$ git clone https://github.com/ZF-Commons/ZfcUser.git
[user@workstation vendor]$ git clone https://github.com/ZF-Commons/ZfcBase.git

Nota: ZfcBase é apenas uma dependência do ZfcUser – contém algumas classes básicas que são úteis para diversos módulos.

Agora habilite os módulos editando ./config/application.config.php e adicionando-os à array demodules:

<?php
return array(
  'modules' => array(
    'Application',
    'ZfcBase',
    'ZfcUser',
  ),
  'module_listener_options' => array(
    'config_glob_paths' => array(
      'config/autoload/{,*.}{global,local}.php',
    ),
    'module_paths' => array(
      './module',
      './vendor',
    ),
  ),
);

Agora precisamos importar o schema do banco do ZfcUser. Se estiver usando o SQLite será necessário apenas uma linha de comando que deverá ser executada na raíz do projeto:

[user@workstation skeleton]$ cat vendor/ZfcUser/data/schema.sqlite.sql | sqlite3 data/users.db

(Se alguém souber como se faz isso no Windows, por favor poste nos comentários!)

Se estiver usando MySQL importe o arquivo ./vendor/ZfcUser/data/schema.sql para o seu banco que configuramos antes.

Deve ser o suficiente! Tente acessar http://seuvhost/user e você será recebido com a tela de login:

Agora você já tem uma aplicação básica rodando com o Zend Framework 2 com suporte a registro e autenticação!

Recursos

Aproveite para dar uma conferida em algumas extensões para o módulo ZfcUser que já existem:

  • BjyAuthorize – Adiciona suporte a ACL utilizando Zend\Acl.
  • CdliTwoStageSignup – Adiciona uma etapa de verificação de e-mail ao processo de registro.
  • CdliUserProfile – Um sistema de perfil de usuário.
  • CdliAutogenUsername – Permite a utilização de nomes de usuário gerados automaticamente depois do registro.
  • ScnSocialAuth – Adiciona autenticação através de redes sociais ao ZfcUser para sites como Google, Facebook, Twitter, Yahoo!, etc.
  • EdpGithub – Adicionada autenticação do Github ao ZfcUser.

Se você estiver se perguntando “e agora?”, tire alguns minutos para ler o excelente tutorial de ZF2 do Rob Allen que explica a criar uma aplicação básica do zero e/ou venha conversar conosco no #zftalk.2 @ Freenode se tiver dúvidas.

Um abraço a todos e fiquem com Deus!
Rafael Jaques

Tutorial adaptado do original escrito por EvanDotPro: http://blog.evan.pro/getting-started-with-the-zf2-skeleton-and-zfcuser

Análise do TextMate 2

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

TextMate 2

Fala, meu povo! Faz tempo que não dou as caras por aqui, certo? Pois é… Mas hoje estou aqui para trazer boas novas!

O TextMate agora é software livre!

Sempre fui um fã do TextMate (apesar dele ser cult) e já tinha perdido as esperanças de que a versão 2 saísse, por isso estava dando uma chance pro SublimeText, mas agora com esse lançamento, definitivamente deixei ele de lado. A maior desvantagem que eu vejo no TM2 em relação ao Sublime é o fato de só rodar em Mac e, segundo os desenvolvedores, não haver nenhuma versão planejada para Linux (apesar de não ser impossível). Pois bem, nas próximas linhas vou relatar as primeiras impressões que tive com a versão aberta do TextMate 2.

Primeiras impressões

À primeira vista é possível perceber que poucas coisas mudaram. O número da linha agora recebe um destaque, não existe mais o logotipo do editor dentro da aplicação e agora há suporte à tela cheia.

Navegador de Projeto

Deus existe! Finalmente o editor tem um navegador de arquivos decente (desde a versão 1.5.10).

Agora os diretórios são organizados da maneira que devem ser (segundo a minha humilde opinião). Na primeira versão do editor era tudo organizado em ordem alfabética e não importava se era arquivo ou diretório. Agora na segunda versão os diretórios ficam antes e os arquivos depois.

Também foram adicionadas algumas opções interessantes. Existe um navegador de diretórios que lembra muito o do Gedit:

Também foram adicionados alguns botões de acesso rápido como: Home, Computer, SmartFolders e Favorites.

Outra coisa interessante é que agora o navegador responde aos comandos do Finder como: ⌥⌘N (novo arquivo), ⇧⌘N (novo diretório) ⌘⌫ (apagar arquivo/diretório) e por aí vai…

Vale a pena comentar também que agora é possível fazer distinção entre selecionarabrir um arquivo. Ao clicar no nome do arquivo ele será apenas selecionado. Para abri-lo você deve clicar no ícone do mesmo.

Manipulando arquivos

Agora eu quase chorei! A manipulação de arquivos ficou excelente! Veja por que:

Existe uma nova funcionalidade que permite, em apenas uma ação, salvar múltiplos arquivos com mesmos nomes ou extensões.

Por exemplo, se eu quiser criar os arquivos index.php config.php, só preciso colocar os nomes entre chaves: {index,config}.php.

Também é possível fazer isso com as extensões e até juntar os dois. Caso eu mande salvar o arquivo com o nome de {index,config}.{php,html} terei então quatro arquivos: index.php, index.html, config.php e config.html.

Outra coisa que ficou sensacional foi a habilidade de recortar arquivos. Já que a Apple não tem a capacidade de implementar isso no Finder, pelo menos dentro do TextMate 2 você vai poder fazer isso! Apenas selecione o arquivo a ser recortado e utilize ⌘X e cole com ⌘V. Simples! :D

Foi implementado o atalho ⌘X que permite que você recorte arquivos.

Editando o código

Algo sutil que eu percebi e que achei muito bacana é o fato do collapse code manter os dois brackets (na primeira versão só o bracket de abertura ficava visível).

A ênfase que é dada no bracket relacionado foi melhorada. Na primeira versão apenas o bracket inicial era indicado. Agora se você passa pelo inicial ele realça o final e vice-versa. O modo de realce também foi alterado para o clássico amarelinho do OSX.

Foi implementado um sistema de Multiple Carets. Como é um assunto bastante longo e foge do foco da minha análise, deixo um link para o blog oficial onde está bem explicadinho.

A seleção de nomes de variáveis via duplo-clique agora atinge também o sinal $. Na primeira versão era selecionado apenas o nome da variável e não o símbolo.

A opção de colar do histórico foi melhorada, permitindo que blocos maiores de código sejam visualizados. O atalho é ⌃⌥⌘V. Você também pode utilizar o ⌃⌥⌘F e utilizar o histórico de pesquisa.

A janela de busca recebeu uma repaginada total.

Opções novas como palavras completas e ignorar espaços em branco reduzem as vezes que você precisa utilizar expressões regulares para encontrar certo padrão. Também é possível escolher onde procurar: documento atual, seleção, arquivos abertos, diretório do projeto, outro diretório, etc.

Sistema de Pacotes

O TextMate 2 brindou-nos com um incrível sistema de pacotes. Agora tudo no editor é um pacote: ferramentas de compilação, suporte das linguagens, temas, ferramentas de testes, suporte a ferramentas de versionamento e outras parafernalhas.

Para saber mais sobre os Bundles (instalação, conversão de temas, etc) você pode ler esse post no blog oficial.

Configuração

Seguindo as novas tendências, a configuração mais aprofundada do editor é feita através de um arquivo de texto (chamado .tm_properties). O que ficou bacana é que você pode ter uma configuração global (na sua home) e configurações específica por projeto e até por diretório!

Para saber mais sobre como configurar o seu TextMate através deste arquivo, dê uma lida no blog oficial neste artigo.

Nesta página você pode encontrar mais explicações sobre os parâmetros, pode ler aqui. Também sugiro que dê uma olhada neste exemplo bem completo e comentado de um arquivo funcional.

Performance

O desempenho em relação à primeira versão do editor foi visivelmente melhorado. Algo que melhorou muito foi a maneira como o editor lida com arquivos que possuem linhas realmente MUITO longas, como scripts minificados. Enquanto a primeira versão apanhava na simples rolagem do código para os lados, nessa nova eu consegui ir até o final do código e inclusive editá-lo! Alguns pequenos errinhos na hora de clicar, como por exemplo o fato de clicar em uma letra e o cursor ir parar algumas letras depois, mas nada que não possa ser resolvido com as setas do teclado. Realmente ficou muito bom!

Por que usar?

Os diversos anos entre o lançamento de uma versão 1.x e a publicação dos fontes na internet fizeram com que o TextMate saísse um pouco dos holofotes, dando espaço a outros editores também muito bons. Sempre vou recomendar esse programa por dois motivos: é de excelente qualidade e é de graça. Isso sem mencionar o fato de que é leve (ou seja, não é em Java) e não precisa criar um monte de lixo para gerenciar um projeto. :)

Obtendo o TextMate 2

Gostou do TextMate 2? Maravilha!

Agora você deve estar se perguntando: “onde vou conseguir o TextMate 2?”. Eu tenho a resposta: no GitHub!

O link para o TextMate 2 é https://github.com/textmate/textmate.

Ali existem todas as instruções para você compilar na sua máquina. Você precisa clonar o projeto para a sua máquina (e não apenas baixar o zip) e só depois compilar.

Se não quiser compilar, você pode baixar um build pronto, clicando no link Downloads e selecionando o pacote mais recente.

Meu TextMate 2 não está colorindo o código! O que eu faço?

Tive o prazer de conversar com o Allan (programador do TextMate) e ele me informou desse macetezinho: caso o editor não esteja colorindo o código (mesmo após instalar os pacotes), feche o programa, apague o diretório ~/Library/Application Support/TextMate/Managed e tudo acontecerá magicamente. Apenas inicie o editor novamente e voilá!

E agora?

Para quem for desbravar o TM2, sugiro que comece a frequentar esse tumblr: Textmate 2 Tips. Existem muitas dicas e macetezinhos bacanas ali pra aprender!

Também é possível ler o FAQ do TextMate 2. Tem muita coisa explicada nos pormenores.

Espero que tenham gostado da análise que fiz, com muito carinho, para os amigos! :)

Comentem o que acharam e deixem também suas contribuições!

Um abraço a todos e fiquem com Deus.
Rafael Jaques

P.S.: Estou preparando novidades!

PHP

Novidades do PHP 5.4 – conheça as mudanças

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Como você deve saber, o PHP 5.4 está às portas e ele é praticamente o PHP 6. Dia 11 de dezembro foi lançado o RC1 do PHP 5.4 e fui dar uma conferida no que há de novo. Lhe digo: é surpreendente!

Se quiser dar uma olhada na lista completa de novas features, dê uma olhada na news.

Caso ainda não saiba do que se trata o PHP 6 e qual a diferença para o PHP 5.4, dê uma olhada nesse artigo que escrevi há alguns dias: Tornando-se compatível com o PHP 6.

Agora apresento-lhes as características que, na minha opinião, são as mais bacanas dessa nova versão!

Servidor HTTP incorporado

Assim como em outras linguagens, o PHP agora também possuirá um servidor HTTP embutido. A maneira mais simples de colocá-lo para funcionar é a seguinte:

php -S localhost:8080

Isso fará com que o servidor rode na máquina local, escutando na porta 8080. Isso é muito importante para quem quer testar rapidamente um arquivo ou um sistema sem ter que configurar toda a estrutura de um servidor. Eu também uso isso (por enquanto, no Python) para compartilhar arquivos pela rede! :)

Sintaxe de array encurtada

Pra mim, uma das alterações mais importantes de todas! Agora não é mais necessário utilizar a função array() para criar vetores.

$frutas = ['Banana', 'Abacaxi', 'Laranja']
$dados = ['nome' => 'Rafael', 'profissao' => 'Professor']

Acesso de propriedades e métodos na instanciação da classe

É possível utilizar fluent interfaces, como no Java:

$meuCarro = (new Carro)->setVelocidade(100)->setCor('azul');

Typehint callable

Esse typehint permite que você passe como um parâmetro uma função, uma função anônima (closure) ou uma array composta por um nome de classe (ou objeto) e um nome de método.

function funcao(callable $func_param) {
  $func_param();
}

// No caso o $func_param() seria a mesma coisa que
// (new Carro)->ligar();
funcao([new Carro(), 'ligar']);

Suporte a valores numéricos binários

Iniciando seus números com 0b é possível definir números binários diretamente no PHP.

$binario = 0b001110;

Suporte à sintaxe Class::{expr}()

Isso fazia MUITA falta! Agora o PHP está mais flexível na hora de invocar métodos. Todas as linhas a seguir são válidas:

$metodo = 'nome_de_metodo';

$teste = new Teste();
$teste->nome_de_metodo();
$teste->$metodo();
$teste->{'nome_de_metodo'}();

Teste::nome_de_metodo();
Teste::$metodo();
Teste::{'nome_de_metodo'}();

Suporte a Traits

As traits são também conhecidas como heranças horizontais.

O PHP não suporta herança múltipla, e por esse motivo, às vezes ficamos limitados em algumas decisões de projeto (design). O maior problema neste ponto é que toda herença até agora (PHP 5.3.x) é vertical, ou seja, se eu precisar de um nível de abstração diferente no meio do processo, ou precisarei adicionar a nova abstração e reescrever tudo abaixo dela, ou ainda, terei que duplicar o código pois não conseguirei satisfazer a herença.

É nesse ponto que os Traits aparecem. Diferentemente da herença (vertical), os Traits possibilitam-nos criar heranças horizontais.

Esse trecho de texto foi retirado do blog do Hélio Costa. Lá você pode saber mais sobre as Traits. Pode também olhar no manual do PHP (em inglês).

class Base {
  public function digaOla() {
    echo 'Olá ';
  }
}

trait DigaMundo {
  public function digaOla() {
    parent::digaOla();
    echo 'mundo!';
  }
}

class MeuOlaMundo extends Base {
  use DigaMundo;
}

$o = new MeuOlaMundo();
$o->digaOla(); // Olá mundo!

 

Suporte a dereferenciamento de arrays

É possível acessar diretamente uma array do retorno de uma função.

 

function frutas() {
return array('a' => 'amora', 'b' => 'banana', 'c' => 'caqui');
}
echo frutas()['c']; // caqui

Desempenho do silenciador (@) melhorado

Nunca recomendei o uso disso mas, de qualquer, melhoraram o desempenho deste operador, que em muitas aplicações é altamente utilizado.

$arquivo = @file_get_contents('/etc/passwd');

Progresso do Upload

De acordo com um dos desenvolvedores do PHP, teremos um medidor de progresso de upload embutido no PHP 5.4 (na versão 5.3 era um patch).

Agora é possível definir uma variável de sessão que é atualizada com o progresso de determinado upload (aleluia). Segue um exemplo:

<form action="upload.php" method="POST" enctype="multipart/form-data">
  
  
  
  

Confesso que espero por isso há tempos!

E outras coisinhas mais…

Existem algumas outras alterações que não são tão impactantes, mas que talvez você goste de saber:

  • Agora existe a possibilidade de desabilitar o processamento de dados do POST a fim de economizar memória e ciclos de CPU. Caso utilize isso, os dados originais ainda (raw data) ainda podem ser lidos pelo stream php://input;
  • Criaram uma interface chamada JsonSerializable, para que o objeto possa ser aceito em um json_encode() (embora o json_decode() não consiga recriar o objeto);

O que NÃO estará no PHP 5.4

Nem todas as features que foram sugeridas acabaram entrando no core do PHP 5.4.

  • Typehint Scalar para parâmetros nos métodos
  • Suporte Unicode/UTF-8 na linguagem para operações de strings :(
  • Tipos primitivos (integer, string, boolean, etc…) como palavras reservadas (foi removido por questão de retrocompatibilidade)
  • Suporte a foreach com list()

Conclusões

Espero que tenha servido para desmistificar as mudanças que vêm aí nas versões 5.4 e 6.0! :)

E você? O que mais gostou no PHP 5.4? Alguma coisa que não falei aqui? Algo que eu falei pouco? Comenta aí e deixa a tua opinião!

Um abraço a todos e fiquem com Deus!
Rafael Jaques

Fontes consultas: