Esses dias fiz um sistema que utilizava o tipo de campo BLOB para armazenar umas imagens.
Até então eu não sabia como fazer para manipular tais arquivos como BLOB.
Então, fiz da seguinte maneira:
Aplicação/Módulos
No meu exemplo de teste usei a aplicação “frontend” (symfony init-app frontend) e o módulo “arquivo” (symfony init-module frontend arquivo)
O schema.yml (config/schema.yml)
propel:
arquivo:
_attributes: { phpName: Arquivo }
id:
img: blob
mime: varchar(120)
created_at:
O form
(apps/frontend/modules/arquivo/templates/indexSuccess.php)
<?php use_helper("Validation") ?>
<?php echo form_tag(‘arquivo/salvararquivo’ , ‘multipart=true’) ?>
<?php echo input_file_tag(‘arquivo’) ?>
<?php echo form_error(‘arquivo’); // esse helper é responsável por mostrar o erro de validação, caso exista ?>
<?php echo submit_tag(‘enviar’) ?>
</form>
<?php echo form_tag(‘arquivo/salvararquivo’ , ‘multipart=true’) ?>
<?php echo input_file_tag(‘arquivo’) ?>
<?php echo form_error(‘arquivo’); // esse helper é responsável por mostrar o erro de validação, caso exista ?>
<?php echo submit_tag(‘enviar’) ?>
</form>
OBS: Lembrar do MULTIPART=TRUE (fiquei um bom tempo até me lembrar de passar esse parâmetro).
Action – Recebo o arquivo do form
(apps/frontend/modules/arquivo/actions/actions.class.php)
public function executeSalvararquivo() {
$phpFile = $this->getRequest()->getFile(‘arquivo’); // pego o arquivo do form
$fileType = $this->getRequest()->getFileType(‘arquivo’); // pego o mimetype do arquivo
$fileBinario = file_get_contents($phpFile["tmp_name"]); // pego o conteudo binario do arquivo
$arquivo = new Arquivo();
$arquivo->setImg($fileBinario); // esse é o campo BLOB
$arquivo->setMime($fileType);
$arquivo->save();
}
public function handleErrorSalvararquivo() {
// esse metodo serve para retornar ao formulário caso algum erro seja encontrado
$this->forward("arquivo" , "index");
}
Validando o arquivo enviado
(apps/frontend/modules/arquivo/validate/salvararquivo.yml)
fillin:
enabled: true
fields:
arquivo:
file: true
required:
msg: É obrigatório o envio de uma imagem
sfFileValidator:
mime_types:
– ‘image/jpeg’
– ‘image/pjpeg’
mime_types_error: Apenas imagens do tipo JPG são válidas
max_size: 20000
max_size_error: O tamanho máximo da imagem é de 20KB
Sucesso
(apps/frontend/modules/arquivo/templates/salvararquivoSuccess.php)
Arquivo salvo com sucesso.
Perfeito. Temos agora um arquivo armazenado no banco de dados.
E para mostrar esse arquivo/imagem numa view ? Usaremos Components. Será a parte II desse post.
>>

Post a Comment