Sim, existe algo mais que o Apache para servidores web. É por isso que nós vamos ver esse tutorial sobre como instalar o symfony no IIS.
De que precisamos?
- Um servidor windows
- Um servidor IIS (óbvio)
- PHP5 instalado e configurado no IIS como um módulo isapi (veja as instruções de instalação do PHP%)
- isapi/rewrite/ "www.isapirewrite.com":http://www.isapirewrite.com, um motor de manipulação de URL que vamos utilizar ao invés do mod_rewrite do Apache. Por que esse produto? Isso parece ser bastante usado no IIS e a versão lite free funciona com o symfony. Se você está acostumado a utilizar algum outro método, vá em frente, deve ter apenas uma diferença no final deste tutorial.
Instalar o symfony
Primeiramente, atualize o pacote do pear, porque você precisa de pelo menos da versão 1.4.0 para utilizar o canais:
$ pear upgrade PEAR
Então, adicione o canal do symfony:
$ pear channel-discover pear.symfony-project.com
Instale a versão do symfony >= 0.5.73:
$ pear install symfony/symfony-beta
Nota: se você não possui o pacote
phing
, você precisa instalar:$ pear install http://phing.info/pear/phing-current.tgz
Saiba mais sobre a instalação do symfony
Iniciando um projeto
Para criar o diretório do seu projeto (vamos usar c:\myproject
) e a estrutura básica para uma aplicação chamada myapp
, abra o console (command) e digite:
$ cd c:\myproject $ symfony init-project myproject $ symfony init-app myapp
Configurando o IIS
Vamos considerar dois tipo de configuração por agora:
- No primeiro caso, o servidor será usado somente para o nosso projeto symfony, e a url será algo parecido com
http://myproject/
. Assumindo que o diretório criado paramyapp
esteja dentro dec:\myproject\
, vamos configurar o diretório root do servidor parac:\myproject\web
(na tela de administração do IIS) - A outra opção é instalar o projeto symfony num diretório (pode ser virtual) do seu servidor. A URL nesse caso será algo parecido com
http://myserver/myproject/
. Na tela de administração do IIS, vamos criar um novo diretório virtual,c:\myproject\web
, no diretório root do seu site.
Adicionaremos um diretório virtual no diretório principal do servidor. Vamos nomeá-lo de sf
e configurar ele para o caminho data\symfony\web\sf
dentro do diretório do pear. Se você tem o PHP5 instalado na pasta c:\php5
, o caminho será C:\php5\PEAR\pear\data\symfony\web\sf
.
Configurando URL rewriting
Vamos assumir que o módulo isapi/rewrite está instalado e funcionando no nosso servidor. Nós precisamos configurar apenas nosso httpd.ini. Essa configuração vai depender da opção escolhida anteriormente:
para URLs do tipo
http://myproject/
vamos precisar de:# Defend your computer from some worm attacks RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O] # we skip all files with .something except .html RewriteCond URL .*\..+$ RewriteCond URL (?!.*\.html$).* RewriteRule (.*) $1 [L] # we keep the .php files unchanged RewriteRule (.*\.php)(.*) $1$2 [L] # finally we redirect to our front web controller RewriteRule (.*) /index.php [L]
para URLs do tipo
http://myserver/myproject/
vamos precisar de:# Defend your computer from some worm attacks RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O] # we skip all files with .something except .html RewriteCond URL /myproject/.*\..+$ RewriteCond URL (?!/myproject/.*\.html$).* RewriteRule /myproject/(.*) /myproject/$1 [L] # we keep the .php files unchanged RewriteRule /myproject/(.*\.php)(.*) /myproject/$1$2 [L] # finally we redirect to our front web controller RewriteRule /myproject/(.*) /myproject/index.php [L]
Reinicie o IIS.
Configurando o symfony
O último passo é editar o arquivo settings.yml
que fica no diretório config do projeto symfony (c:\myproject\apps\myapp\config\
). Você não vai se surpreender se encontrar uma pequena diferença nos dois casos:
para URLs do tipo
http://myproject/
vamos precisar de:all: .settings: path_info_key: HTTP_X_REWRITE_URL
para URLs do tipo
http://myserver/myproject/
vamos precisar de:all: .settings: path_info_key: HTTP_X_REWRITE_URL
Dica importante: se você não está usando o módulo isapi/rewrite/, o
HTTP_X_REWRITE_URL
pode estar errado. Você vai precisar fazer um teste específico para configurar o symfony. Abra o arquivomyapp_dev.php
(ou qualquer outro nome application_dev.php
) no diretório web do seu projeto e adicione as 2 linhas seguintes:print phpinfo(); die();Agora abra a URL:
http://myproject/myapp_dev.php/test/rewrite
(ouhttp://myserver/myproject/myapp_dev.php/test/rewrite
dependendo da sua configuração), e veja as variáveis do PHP. Se_SERVER["PATH_INFO"]
for igual a /test/rewrite, remova a linha que contém opath_info_key
dosettings.yml
, senão você vai ter que achar o nome da variável que contém o valor (HTTP_X_REWRITE_URL
paraisapi/rewrite/
). Depois que achar, remova as 2 linhas acima e pronto.
Configurando uma aplicação symfony com diretório específico
Um projeto symfony pode conter diversas aplicações. Por padrão, todas as aplicações podem compartilhar o mesmo diretório de css e uploads. Vamos trocar isso e criar um diretório específico para nossa aplicação myapp. Considerando as opções anteriores, vamos interpretar as seguintes URLs: http://myproject/myapp
e http://myserver/myapp
. Agora não temos mais diferença na configuração das próximas opções.
Vamos criar um subdiretório myapp
dentro do diretório web do nosso projeto (no nosso caso c:\myproject\web\myapp
).
Vamos copiar os arquivos index.php
e myapp_dev.php
para esse diretório e criar mais dois diretórios lá dentro, css
e uploads
.
Na tela de administração do IIS, vamos criar um novo diretório virtual chamado myapp
. Configure esse diretório apontando para c:\myproject\web\myapp
.
Adicione as linhas abaixo no final do httpd.ini
:
#[Configuration for direct myapp access] # we skip all files with .something except .html RewriteCond URL /myapp/.*\..+$ RewriteCond URL (?!/myapp/.*\.html$).* RewriteRule /myapp/(.*) /myapp/$1 [L] # we keep the .php files unchanged RewriteRule /myapp/(.*\.php)(.*) /myapp/$1$2 [L] # finally we redirect to our front web controller RewriteRule /myapp/(.*) /myapp/index.php [L]
Edite o settings.yml
da aplicação myapp
(c:\myproject\apps\myapp\config\settings.yml
) e tenha certeza das seguintes linhas:
all: .settings: path_info_key: HTTP_X_REWRITE_URL
(veja as considerações anteriores para HTTP_X_REWRITE_URL
)
Finalmente, vamos editar nossos front controllers (index.php
e myapp_dev.php
em c:\myproject\web\myapp
) e trocar:
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/..'));
para:
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/../..'));
É isso ai. Terminamos.
This work is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.