Post-it é um plugin para o CakePHP que existe para suprir as necessidades básicas de upload de imagem, permitindo um bom controle sobre o processo de upload e redimensionamento da imagem. Ele ainda é capaz de gerar uma miniatura. Ele é totalmente desenvolvido por mim, e sinta-se livre para usá-lo no seu projeto ou melhorá-lo.

Desenvolvi o Post-it porque não encontrei nada para o CakePHP que resolvesse o meu problema. E então reparei que os plugins e componentes existentes para ele geralmente são focados demais em resolver um problema de um jeito específico demais.

A interface para acessar o plugin segue um estilo mais comum no Ruby on Rails do que no PHP. Os parâmetros são passados através de parâmetros encadeados, que eu acredito ser um estilo muito mais elegante do que passar vários parâmetros entre parenteses.

Exemplo:

$this->Postit->imagem("foto")->tamanho("290x435")->na_pasta("fotos")->envia();

Download:

Você pode baixar o plugin Post-it aqui neste post, ou pode baixá-lo do GitHub, usando o Git (um sistema de gerenciamento de versões). Muito provavelmente novas versões do plugin serão lançadas primeiro no GitHub antes de serem colocadas aqui. Se você procura a versão mais recente, dá uma olhada por lá.

Download direto

Post-it no GitHub

Instalação:

Para instalar plugins no CakePHP você só precisa descompactar o arquivo, e jogar a pasta do plugin dentro da pasta app/plugins do seu projeto.

O plugin contém apenas um Component que faz todo o trabalho. Para chamar um component dentro de um projeto, você declara a seguinte variável no seu controller.

var $components = array('Postit.Postit');

Depois disso, pode usá-lo chamando $this->postit

Aviso: O plugin Post-it necessita da biblioteca GD para redimensionar imagens.

Passando Parâmetros:

Os parâmetros são passados através de métodos. Como os métodos retornam o próprio objeto, você pode encadeá-los, chamando um método depois do outro.

O único parâmetro obrigatório no Post-it é imagem($img), que recebe uma string indicando qual campo do formulário contém a imagem que foi enviada. Todos os outros são opcionais. Se os outros parâmetros não forem fornecidos, o sistema gera um nome numérico para a imagem, não faz nenhum redimensionamento, e ela é armazena dentro de webroot/img/ do seu projeto.

Parâmetros Inteligentes:

Alguns dos parâmetros entendem o momento em que foram chamados, e agem de forma diferente. Esse tipo de parâmetro afeta a imagem principal ou a miniatura, dependendo da ordem em que foram chamados. Se você está passando parâmetros da miniatura e então chama um desses parâmetros inteligentes, ele vai afetar os dados da miniatura.

Veja os exemplos abaixo:

$this->Postit->imagem("foto")->na_pasta("fotos")->com_miniatura("90x90")->envia();
$this->Postit->imagem("foto")->com_miniatura("90x90")->na_pasta("fotos")->envia();

No primeiro exemplo acima, o método na_pasta() está se referindo à imagem principal. Então ele vai entender que você quer que as imagens principais sejam guardadas em img/fotos. Já no segundo exemplo, o método na_pasta() vai entender que você está falando da miniatura, e então vai guardar as fotos na pasta padrão (img/) e vai guardar as miniaturas na pasta img/fotos/.

Este estilo de método que varia de acordo com o contexto é uma ótima forma de reduzir o número de métodos que você tem que decorar, e ainda tornar o código mais legível, mais léxico.

Dentro do código você vai encontrar comentários no padrão do PHPDoc explicando todos os parâmetros disponíveis. Também é possível encontrar uma página HTML com a documentação do plugin dentro da pasta Documentação. Em ambos os locais é possível encontrar tudo que você precisa para fazer upload e redimensionamento de imagem de forma simples e rápida.

Você tem alguma sugestão? Você tem alguma necessidade básica no upload de imagens com o CakePHP que o plugin Post-it não resolve?