Qual é a melhor maneira de obter o diretório de aplicativos raiz de dentro do controlador? É possível tirá-lo do controle?
Agora eu entendi passando-o (dos parâmetros) para o serviço como argumento, assim:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Existe uma maneira melhor e mais simples de obter essas informações no Symfony2?
php
symfony
symfony-2.8
symfony-config-component
Dawid Ohia
fonte
fonte
%kernel.project_dir%
para obter a raiz do seu projeto.["%kernel.root_dir%"]
Respostas:
UPDATE 2018-10-21:
A partir desta semana,
getRootDir()
foi preterido. EmgetProjectDir()
vez disso, use como sugerido na seção de comentários de Muzaraf Ali.—-
Usa isto:
E se você quiser a raiz da web :
isso funcionará a partir do método de ação do controlador ...
EDIT: Quanto aos serviços, acho que da maneira que você fez, o mais limpo possível, embora eu passasse o serviço completo do kernel como argumento ... mas isso também fará o truque ...
fonte
$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
$this->container->getParameter('kernel.cache_dir')
em controladores em vez da solução que você forneceucontainer
injetado :) Se você seguir as práticas recomendadas, a injeçãocontainer
deve ser evitada a todo custo. Quanto à solução de conseguirweb
diretório, eu ainda uso o que eu forneci acima;)%kernel.project_dir%/web/
em vez de%kernel.root_dir%/../web/
No Symfony 3.3 você pode usar
para obter a raiz da web / projeto.
fonte
Se você estiver usando esse caminho para acessar partes dos projetos que não são código (por exemplo, um diretório de upload ou um banco de dados SQLite), talvez seja melhor transformar o caminho em um parâmetro, como este:
Esse parâmetro pode ser injetado em qualquer lugar que você precisar, para que você não precise mais mexer nos caminhos do seu código. Além disso, o parâmetro pode ser substituído no momento da implantação. Finalmente, todo programador de manutenção terá uma idéia melhor para o que você o está usando.
Atualização: Corrigido o uso constante do kernel.root_dir.
fonte
Você também pode usar a expressão regular além disso:
fonte
Desde o Symfony 3.3, você pode usar encadernação, como
Depois disso, você pode usar o parâmetro $ kernelProjectDir em qualquer controlador OU serviço. Assim como
fonte