Manipulando campo do tipo blob com symfony (Parte 2-2)

Vamos lá! Teremos que criar um novo component.A classe do componente deve ficar em apps/frontend/modules/arquivo/actions/components.class.php:

Action



class arquivoComponents extends sfComponents
{
}

?>

OBS: class NOME-DO-MODULOComponents extends…

Vamos criar um método executeLer().
Retorne um arquivo qualquer, apenas para teste. Aqui vou retornar o arquivo mais recente.


class arquivoComponents extends sfComponents
{
    public function executeLer() {
      $c->addDescendingOrderByColumn(ArquivoPeer::CREATED_AT);
      $arquivo = ArquivoPeer::doSelectOne($c);

      $this->bin = $arquivo->getImg(); // conteudo binario

      // não podemos ter layout já que essa action
      //só pode retornar o binário e nada de HTML
      $this->setLayout(false);
      $this->getResponse()->clearHttpHeaders();
      // atribuindo o header
     $this->getResponse()->setHttpHeader("Content-Type", "image/jpeg", true);
     // passo o header do tamanho do arquivo
     $this->getResponse()->setHttpHeader("Content-Length", strlen($this->bin), true);
  }
}

?>

Template (_ler.php)


Agora vamos criar a view desse componente.
Ela deve ficar em apps/frontend/modules/arquivo/templates/_ler.php

O _ler.php terá apenas:


 <?php echo $bin ?>

Agora para introduzir a imagem que esse componente gera em algum template, basta chamar o componente:

 <?php include_component("arquivo", "ler") ?>

OBS: Limpe o cache

$ symfony cc

Lembrando: Podemos passar parametros ao incluir um componente.

Podemos passar o ID da imagem a ser recuperada. (nesse caso é preciso adaptar a action para receber esse id)


<?php include_component("arquivo", "ler", array("idimg" => 5)) ?>

Para receber o parametro na action: $this->idimg
Para receber o parametro na view: $idimg