Documentação do Symfony2
Renderizada do repositório symfony-docs-pt-BR no Github

Como Substituir a Estrutura de Diretório Padrão do Symfony

O Symfony vem automaticamente com uma estrutura de diretórios padrão. Você pode facilmente substituir essa estrutura de diretório criando a seu própria. A estrutura de diretório padrão é:

app/
    cache/
    config/
    logs/
    ...
src/
    ...
vendor/
    ...
web/
    app.php
    ...

Substituir o diretório cache

Você pode substituir o diretório cache, sobrescrevendo o método getCacheDir na classe AppKernel de sua aplicação:

// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    // ...

    public function getCacheDir()
    {
        return $this->rootDir.'/'.$this->environment.'/cache/';
    }
}

$this->rootDir é o caminho absoluto para o diretório app e $this->environment é o ambiente atual (ou seja, dev). Neste caso você alterou a localização do diretório cache para app/{environment}/cache.

Caution

Você deve manter o diretório cache diferente para cada ambiente, caso contrário, algum comportamento inesperado pode acontecer. Cada ambiente gera seus próprios arquivos de configuração em cache, e assim, cada um precisa de seu próprio diretório para armazenar os arquivos de cache.

Substituir o diretório logs

O processo para substituir o diretório logs é o mesmo do diretório cache, a única diferença é que você precisa sobrescrever o método getLogDir:

// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    // ...

    public function getLogDir()
    {
        return $this->rootDir.'/'.$this->environment.'/logs/';
    }
}

Aqui você alterou o local do diretório para app/{environment}/logs.

Substituir o diretório web

Se você precisa renomear ou mover o seu diretório web, a única coisa que você precisa garantir é que o caminho para o diretório app ainda está correto em seus front controllers app.php e app_dev.php. Se você simplesmente renomear o diretório, então está tudo ok. Mas se você moveu de alguma forma, pode precisar modificar os caminhos dentro desses arquivos:

require_once __DIR__.'/../Symfony/app/bootstrap.php.cache';
require_once __DIR__.'/../Symfony/app/AppKernel.php';

Tip

Alguns hosts compartilhados tem um diretório raiz web public_html. Renomeando seu diretório web de web para public_html é uma maneira de fazer funcionar o seu projeto Symfony em seu servidor compartilhado. Outra forma é implantar sua aplicação em um diretório fora do raiz web, excluir seu diretório public_html e, então, substituí-lo por um link simbólico para o web em seu projeto.

Note

Se você utiliza o AsseticBundle precisará configurar o seguinte, para que ele possa usar o diretório web correto:

# app/config/config.yml

# ...
assetic:
    # ...
    read_from: "%kernel.root_dir%/../../public_html"

Agora você só precisa realizar o dump dos assets novamente e sua aplicação deve funcionar:

$ php app/console assetic:dump --env=prod --no-debug