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:
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
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)
Para receber o parametro na action: $this->idimg
Para receber o parametro na view: $idimg

Rick | 21-Jun-08 at 6:47 pm | Permalink
Muy buena!! sigue asi….Saludos desde Bolivia….