Como servir conteúdo estático

Propósito

Se você deseja servir conteúdos estáticos através de um módulo simples onde o conteúdo específico é definido por um parâmetro, você pode fazer isto facilmente utilizando 'parciais' como visto no exemplo abaixo.

Método

  • Crie um módulo chamado estatico
  • Utilize a ação padrão index do módulo.
  • Crie o arquivo indexSuccess.php com uma parcial
  • Atualize a ação executeIndex.
  • Crie a regra em sua_aplicacao/config/routing.yml
  • Crie as parciais para armazenar cada página do seu conteúdo estático

Exemplo

Para utilizar uma URL como http://localhost/estatico/a_empresa:

actions.class.php

<?php
class staticActions extends sfActions
{
	public function executeIndex()
	{
	  $this->content = $this->getRequestParameter('conteudo');
	}
}
?>

indexSuccess.php

<?php include_partial($conteudo); ?>

routing.yml

(adicione antes das regras padrões)

static:
  url:   /estatico/:conteudo
  param: { module: estatico, action: index }

_a_empresa.php

<table>
  <tr>
    <td>Seu conteúdo html</td>
  </tr>
</table>

Verificando a existência da parcial através da ação

Você pode adicionar uma lógica de redirecionamento para a página 404 caso o conteúdo estático que está sendo requisitado não exista. Este código define uma função que verifica se a parcial pode ser acessada pela 'ação' e redireciona para página 404 em caso negativo.

actions.class.php

class staticActions extends sfActions {
   public function executeIndex() {
      $this->conteudo = $this->getRequestParameter("conteudo");
         
      $context = $this->getContext();
         
      $this->forward404Unless($this->partialExists($context, $this->conteudo));
   }
      
   protected function partialExists($context, $name) {
      $directory = $context->getModuleDirectory();
                                                     
      if (is_readable($directory . DIRECTORY_SEPARATOR ."templates". DIRECTORY_SEPARATOR ."_". $name .".php")) {
         return true;
      } else {
         return false;
      }
   }
}

Créditos

Essa página foi criada através das perguntas e respostas de davedash e Ian no fórum oficial.