¿Cuál es la mejor manera de obtener el directorio raíz de la aplicación desde el controlador? ¿Es posible sacarlo del controlador?
Ahora lo obtengo pasándolo (de parámetros) al servicio como argumento, así:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
¿Existe una manera mejor y más simple de obtener esta información en Symfony2?
php
symfony
symfony-2.8
symfony-config-component
Dawid Ohia
fuente
fuente
%kernel.project_dir%
para llegar a la raíz de su proyecto.["%kernel.root_dir%"]
Respuestas:
ACTUALIZACIÓN 2018-10-21:
A partir de esta semana,
getRootDir()
quedó en desuso. En sugetProjectDir()
lugar, utilícelo , como se sugiere en la sección de comentarios de Muzaraf Ali.—-
Utilizar este:
Y si quieres la raíz web :
esto funcionará desde el método de acción del controlador ...
EDITAR: En cuanto a los servicios, creo que la forma en que lo hizo es lo más limpia posible, aunque pasaría el servicio completo del kernel como argumento ... pero esto también hará el truco ...
fuente
$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
$this->container->getParameter('kernel.cache_dir')
en los controladores en lugar de la solución que ya ha proporcionadocontainer
inyección de su servicio :) Si sigue las mejores prácticas,container
debe evitarse la inyección a toda costa. En cuanto a la solución de obtener elweb
directorio, todavía uso el que proporcioné anteriormente;)%kernel.project_dir%/web/
lugar de%kernel.root_dir%/../web/
En Symfony 3.3 puedes usar
para obtener la raíz web / proyecto.
fuente
Si está utilizando esta ruta para acceder a partes de los proyectos que no son código (por ejemplo, un directorio de carga o una base de datos SQLite), entonces podría ser mejor convertir la ruta en un parámetro, como este:
Este parámetro se puede inyectar en cualquier lugar donde lo necesite, por lo que ya no tiene que perder el tiempo con las rutas en su código. Además, el parámetro se puede anular en el momento de la implementación. Finalmente, cada programador de mantenimiento tendrá una mejor idea de para qué lo está utilizando.
Actualización: Se corrigió el uso constante de kernel.root_dir.
fuente
También puede usar expresiones regulares además de esto:
fuente
Desde Symfony 3.3 puedes usar enlaces, como
Después de eso, puede usar el parámetro $ kernelProjectDir en cualquier controlador O servicio. Al igual que
fuente