| 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(); |