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.