Post com a tag love cakephp
Cakephp – Trabalhando Upload com a classe Verot
31Na verdade a classe se chama somente class.upload.php ou Class Upload, é um nome meio genérico e por isso os desenvolvedores adotaram esta classe como Classe Verot. Isso porque Verot é o sobrenome do criador da class, seu nome é Colin VEROT.
Até hoje eu não encontrei uma class tão completa para trabalhar com imagens como esta, uso já faz alguns anos e hoje trabalhando com cakephp não foi diferente. Vou explicar aqui um pouco de como trabalhar com esta class dentro do Cakephp.
Primeiramente devemos transformar a class em um component. É muito simples, um component nada mais é do que uma class, então só devemos colocá-la dentro de uma class e estender para o objeto.
Baixe a class normal neste link: http://www.verot.net/php_class_upload_download.htm
Abra a class com seu editor e insira no inicio:
[sourcecode language='php']
class UploadComponent extends Object {
[/sourcecode]
Obs: Não se esquece de fechar a class no final.
Coloque dentro da pasta de components do seu projeto.
Pulando a parte de formulários e html, vamos ver como fica o controller.
No controller, habilite o component com public $components = array('Upload');
O script para fazer upload é bem simples, você pode até criar uma função no controller e depois chamar a função pelo método, veja como eu crio a função:
[sourcecode language='php']
private function uploadImg($imagem){
$this->Upload->upload($imagem);
$imgName = date(‘dmY_His’);
$this->Upload->file_new_name_body = $imgName;
$this->Upload->image_resize = true;
$this->Upload->image_x = 400;
$this->Upload->image_ratio_y = true;
$this->Upload->jpeg_quality = 70;
$this->Upload->allowed = array(‘image/jpeg’,'image/jpg’,'image/gif’);
$this->Upload->process(“img/usuarios/”);
if ($this->Upload->processed) {
$this->Upload->clean();
} else {
$this->erro = $this->Upload->error;
}
return $imgName.”.”.$this->Upload->file_src_name_ext;
}
[/sourcecode]
Linha 01: Iniciamos a função, eu criei como private, mas caso você precise usá-la em outros controllers, substitua private por public.
Linha 02: Iniciamos o componente nesta linha e o atribuímos a imagem. A variavel $imagem deve receber o array completo de um arquivo.
Linha 03: Definimos um nome padrão para o arquivo, eu costumo criar o arquivo como dia, mes, ano, hora, minuto e segundo.
Linha 04: Atribuímos o nome padrão que criamos para a variável do component file_new_name_body. O componente vai copiar o arquivo e dar o nome que atribuímos e não o mesmo nome do arquivo original.
Linha 05: image_resize serve para habilitar o redimensionamento da imagem. Caso ele esteja como false, a linhas 06 e 07 não irão funcionar.
Linha 06: Em image_x definimos o tamanho do redimensionamento da imagem.
Linha 07: image_ratio_y é muito importante, se a imagem estiver com o redimensionamento habilitado, esta variável faz que a altura da imagem seja redimencionada na proporção da largura, assim a imagem não fica distorcida.
Linha 08: A jpeg_quality copia o arquivo na qualidade escolhida, neste caso com a qualidade 70.
Linha 09: Allowed configura os tipos de arquivos que serão aceitos. Para aceitar todos os tipos de de imagens, é só colocar image/*.
Linha 10: Process é comando que executa o upload. Dentro de Process é o diretório que o arquivo será gravado.
Linha 11: Verifica se o upload foi um sucesso.
Linha 12: Se o upload for um sucesso, a função clean() vai executar uma limpeza do component.
Linha 14: Se o upload falhar, a função irá retornar o erro na variável $this->erro.
Linha 16: file_src_name_ext pega a extensão do arquivo, então eu aproveito para montar o nome do arquivo completo e retornar na função.
Dentro do método é só chamar a função, veja um exemplo:
[sourcecode language='php']
$this->data['Model']['imagem'] = $this->uploadImg($this->data['Model']['imagem']);
[/sourcecode]
Para trabalhar com o erro que a função gerou, basta imprimir a variável $this->erro.
A Class Verot é muito bem documentada, seu autor teve um cuidado nesse processo, tem uma explicação completa sobre todos os recursos da class. Você pode acompanhar a documentação completa neste link: http://www.verot.net/res/sources/class.upload.html.
Vou listar alguns dos recursos que a classe tem:
- Aplicar marcas d’agua na imagem
- Escrever na imagem
- Alterar contraste
- Aplicar efeito negative
- Cortar imagem
- Redimensionar de forma inteligente
- Alterar qualidade
- É possível detectar a largura e altura da imagem e validar
- Converter em outros formatos: jpg, gif, png, bmp e etc
- Dar zoom na imagem
Há muito mais recursos, vale a pena conferir sua documentação.
Atualização [02-11-09]
Como algumas pessoas tiveram dúvidas quanto o component para cekaphp da class verot, disponibilizei para download neste link: http://www.renanlima.com/downloads/uploadVerot.zip
CakePHP dentro de grandes empresas
4Embora o CakePHP tenha lá seus 3 aninhos de vida, somente agora ele estourou entre os profissionais.
CakePHP ganhou forças e mostra-se presente em grandes empresas.
Em uma pesquisas que fiz no site www.cakephp.com.br e no titio Google.com. Pude perceber que as empresas estão procurando se informar quanto o CakePHP, algumas até pedem experiência com CakePHP em seu currículo.
Em uma enquete do site cakephp.com.br(04/2008), mostra que em segundo lugar, as pessoas usam o cakephp no trabalho. Em primeiro lugar ficou quem usa o cakephp para estudo.
Então isso quer dizer algo ao mercado, afinal, os frameworks estão aí, tem muitos bons e cabe a sua empresa(e você) escolher um que realmente cumprem com suas necessidades.
Aqui na universidade onde trabalho estamos fazendo tudo que é novo em CakePHP, não dá para passar o que é antigo para cake, mas o que é novo estamos usando esta nova e amigável ferramenta. O ganho de tempo que estamos ganhando é grande e isso eu não queremos perder.
É fato que framework nos faz trabalhar mais rápido, além de ter uma organização excelente e seguir os padrões atuais. Uma coisa interessante e animadora é que o CakePHP está cada vez mais semelhante ao Ruby, isso de fato está fazendo uma grande diferença em comparação as outras ferramentas. Isso porque o Ruby está sendo muito elogiado, principalmente nos vídeos que compara o JAVA com RUBY, e nessa, quem leva a melhor é o Ruby pela sua rapidez, organização, flexibilidade, economia.. bem.. é melhor parar por aqui.
Quanto a comunidade CakePHP, esta não para de crescer, conquistando novos seguidores e ajudando uns aos outros.
Ainda tem muita coisa pela frente, vamos ver o que vem por aí.
Comentários recentes