Olá colegas. |
Eu precisei gravar uma imagem dentro de um campo blob, mas não encontrei exemplo de como fazer isso no adianti. |
Segue a forma como resolvi. |
Na classe active Record tive que fazer o seguinte: |
Segue a forma como resolvi. Talvez não seja a melhor forma, mas pelo menos resolveu meu problema. |
Caso algum colega saiba de uma melhor forma de resolver o problema, por gentileza coloque aqui. |
A ideia é sempre usar um arquivo de imagem, antes de gravar no banco, ou até mesmo antes de renderizar na tela. |
Esse arquivo fica numa pasta temporaria, e será apagado depois de certo tempo. |
O unico incoveniente é que, toda vez que o registro é editado, um novo arquivo temporario é criado. Logo, a pasta "tmp" vai enchendo. Por isso que eu preciso apagar os arquivos temporarios. Se alguem tiver uma ideia melhor, posta aqui. |
Na classe active Record tive que fazer o seguinte: Criei um campo virtual "imagem" que irá receber o caminho do arquivo temporario através de um metodo magico. |
<?php |
class MinhaClasse extends TRecord |
?> |
Na classe TPage de edição, onde a imagem será mostrada, eu resolvi usar um TImageCropper para pegar o campo virtual e mostrar na tela. Caso o usuario deseje selecionar outra imagem para ser gravada no banco, esse mesmo campo será usado para armazenar o local onde a imagem foi gravada. |
<?php |
class MinhaClasseForm extends TPage |
parent::__construct(); |
... |
... |
// Aqui estou pegando informacao daquele metodo magico get_imagem |
$img_brasao = new TImageCropper('imagem'); |
$img_brasao->setAllowedExtensions( [ 'png', 'jpg', 'jpeg'] ); |
$img_brasao->setSize(100, 200); |
$nm = json_decode(urldecode($data->imagem)); |
$file = getcwd().'/tmp/'. basename( $nm->fileName ); |
$img = file_get_contents($file); |
$object-> |
$object->store(); |