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

Cómo personalizar la Estructura de Directorio por defecto

Una de las grandes ventajas de utilizar un framework (o marco de trabajo) es la estructura consistente que brinda entre los proyectos. Todos los proyectos comparten los mismo estándares de código, y también la misma estructura de directorio. Esta estructura permite a muchos desarrolladores trabajar en el mismo proyecto a la vez. Pero también mejora la mantenibilidad de la aplicación desarrollada. Cuando alguien te pide que le des mantenimiento a un proyecto hecho con Symfony que no desarrollaste inicialmente, ya sabes donde están guardados los ficheros y puedes empezar a modificarlo de inmediato.

Pero a veces, necesitas contar con la posibilidad de personalizar la estructura de directorio proveída por Symfony. Tomemos dos ejemplos muy diferentes.

Primero, digamos que tu proyecto Symfony se hospeda en un entorno anfitrión compartido (del inglés shared host), donde el directorio web raíz se llama public_html. Editanto la clase ProjectConfiguration, es muy facil cambiar el directorio web raíz por defecto de ser web a public_html como se muestra a continuación:

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

Tomemos otro ejemplo. Tu proyecto Symfony es ahora hospedado por una compañía muy grande con estrictas reglas de seguridad. Ellos no permiten que tus aplicaciones escriban en disco excepto en algunos directorios específicos (/tmp por ejemplo). Como Symfony solamente escribe en dos directorios (cache, and log), resulta muy sencillo actualizar la clase ProjectConfiguration nuevamente para mover estos directorios hacia el directorio /tmp:

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

El método setCacheDir() no solamente cambia la constante sf_cache_dir sino también las restantes constantes relacionadas con caché: 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, y sf_module_cache_dir.

Y por último, pero no por ello menos importante, como las clases de configuración también son utilizadas por la CLI (Interfaz de Línea de Comandos, del inglés Command Line Interface) de Symfony, todas estas personalizaciones también están activas para todas las tareas que vienen con Symfony y tus tareas (del inglés tasks) específicas.

Gracias a las nuevas clases de configuración de Symfony 1.1, la configurabilidad del framework nunca ha sido más facil.