Caution: You are browsing the legacy symfony 1.x part of this website.

Como personalizar a estrutura de diretórios padrão

Umas das grandes vantagens de usar um framework é a estrutura consistente que ele proporciona ao longo dos projetos. Todos os projetos compartilham os mesmos padrões de código e também a mesma estrutura de diretórios. Essa estrutura permite que vários desenvolvedores trabalhem no mesmo projeto ao mesmo tempo. Mas isso também aumenta a facilidade de manter as aplicações desenvolvidas. Quando alguém pede que você de manutenção em um projeto que inicialmente você não participou, você conhece aonde todos os arquivos estão armazenados e você já pode sair programando na mesma hora.

Mas as vezes você precisa personalizar a estrutura de diretórios dada pelo symfony. Vamos pegar dois exemplos bem diferentes.

Primeiro, vamos dizer que você hospeda seu projeto symfony em um ambiente compartilhado(shared host), onde o diretório raiz web é chamado public_html. Editando a classe ProjectConfiguration, é bem fácil de mudar o diretório web padrão de web para public_html como mostrado abaixo:

// config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->setWebDir($this->getRootDir().'/../public_html');
  }
}

Vamos ver um outro exemplo. Seu projeto symfony agora é hospedado em uma grande companhia com regras de segurança rigídas. Eles não deixam sua aplicação escrever no disco, exceto em alguns diretórios específicos.(/tmp por exemplo). Como o symfony só escreve em dois diretórios (cache, e log), é simples atualizar novamente a classe ProjectConfiguration e mover esses diretórios para dentro de /tmp:

// config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->setCacheDir('/tmp/myproject/cache');
    $this->setLogDir('/tmp/myproject/log');
  }
}

O método setCacheDir() não muda somente a constante sf_cache_dir mas todas as relacionadas ao cache : sf_app_base_cache_dir, sf_app_cache_dir, sf_template_cache_dir, sf_i18n_cache_dir, sf_config_cache_dir, sf_test_cache_dir e sf_module_cache_dir.

E a última mas não menos importante: Como as classes de configuração também são usadas na symfony CLI, todos esses ajustes também ficam ativos para todas as tarefas instaladas com o symfony e as suas específicas.

Graças as novas classes de configuração do symfony 1.1, a configuração do framework nunca foi tão fácil.