[Symfony] Alterando o diretório padrão

O Symfony é indicado para o desenvolvimento de aplicações onde o principal recurso é o próprio framework, pois exige que quase todas as suas pastas estejam abaixo do diretório public_html ou www.

Entretanto quando temos já alguma aplicação rodando na raiz, pode se tornar confuso misturar as pastas das aplicações ou caso já tenha alguma aplicação rodando em outra versão de symfony se tornará impossível a coexistência.

Colocar a aplicação inteira dentro da pasta public também não é uma opção, pois os arquivos de configuração com as senhas do banco de dados ficariam expostos.

Pensando nisso, pesquisei como é possível alterar a estrutura de diretórios para organizar melhor as aplicações.

Com base na nova versão 3 do Symfony temos a seguinte estrutura

[ftp root]
+- app
+- bin
+- src
+- tests
+- var
+- vendor
+- web (public_html/www)

Se a aplicação for instalada diretamente no servidor, basta inserir o conteúdo da pasta web na pasta pública do host e as demais no mesmo nível

Para o nosso caso eu alterei para a seguinte forma

[ftp root]
+- symfony3
+--- /app
+--- /bin
+--- /src
+--- /tests
+--- /var
+--- /vendor
+- public_html
+--- minha-aplicacao (antiga pasta web)

Para que o serviço reconheça é preciso alterar os paths dos arquivos app.php e app_dev.php que estão dentro da pasta minha-aplicacao

$loader = require __DIR__.'/../../symfony3/app/autoload.php';

// esta linha existe somente no arquivo app.php
include_once __DIR__.'/../../symfony3/var/bootstrap.php.cache';

E alterar no composer.json a linha referente à antiga pasta web

[...] 
"symfony-web-dir": "../public_html/minha-aplicacao",
[...]

Até este ponto é possível encontrar na documentação do symfony em http://symfony.com/doc/current/configuration/override_dir_structure.html mas o que não está na documentação e que atrapalha o processo são os seguintes passos necessários:

Para testar no server local

  1. Atualize as dependências do composer
    composer update
  2. Não utilize o php built in server utilize o server do symfony, afinal é nele que você está desenvolvendo.
  3. Acrescente o argumento  –docroot=../public_html/minhaaplicacao/ (Esse endereço é com base na pasta bin da estrutura)
  4. php bin/console server:run  --docroot=../public_html/minhaaplicacao

Para upload no servidor:

  1. Atualize as dependências do composer
  2. composer update
  3. LIMPE O CACHE!
    $ php bin/console cache:clear --env=prod --no-debug
  4. Faça o upload.