Cómo conseguir la ruta base de Symfony en una entidad

Hola:

Estoy superando los test de SensioLabsInsight y me faltan 8 para conseguir el 100%. 7 de estos fallos es el siguiente "Absolute path constants DIR and FILE should not be used" en referencia a que en las entidades en las que se suben archivos tengo este cogido:

protected function getUploadRootDir()
{
    return __DIR__.'/../../../../web/'.$this->getUploadDir();
}

¿Hay alguna manera de solucionarlo de manera sencilla?

Respuestas

#1

Las entidades de Doctrine están diseñadas para que sean objetos PHP simples. Esto significa que no tienen acceso a configuraciones o servicios externos y esto se considera una característica en vez de una limitación o un error.

La forma recomendada de solucionar este problema es pasar desde fuera los parámetros que necesites. Por ejemplo, en tu caso podrías hacer lo siguiente:

protected function getUploadRootDir($absoluteWebDir)
{
    return $absoluteWebDir.'/'.$this->getUploadDir();
}

Y en un controlador por ejemplo, harías lo siguiente:

// ...
$dir = $entity->getUploadRootDir($this->container->getRootDir().'/../web');
#2

Entiendo. Entonces si utilizo un fichero de configuración podría usar el Parser de yaml para pasarle el archivo y convertirlo en un array asociativo como viene en este ejemplo.