Quelle est la meilleure façon d'obtenir le répertoire racine de l'application depuis le contrôleur? Est-il possible de le sortir du contrôleur?
Maintenant, je l'obtiens en le passant (à partir des paramètres) au service en tant qu'argument, comme ceci:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Existe-t-il un moyen meilleur et plus simple d'obtenir ces informations dans Symfony2?
php
symfony
symfony-2.8
symfony-config-component
Dawid Ohia
la source
la source
%kernel.project_dir%
pour accéder à la racine de votre projet.["%kernel.root_dir%"]
Réponses:
MISE À JOUR 2018-10-21:
À partir de cette semaine,
getRootDir()
était obsolète. Veuillez utiliser à lagetProjectDir()
place, comme suggéré dans la section des commentaires de Muzaraf Ali.—-
Utilisez ceci:
Et si vous voulez la racine Web :
cela fonctionnera à partir de la méthode d'action du contrôleur ...
EDIT: En ce qui concerne les services, je pense que la façon dont vous l'avez fait est aussi propre que possible, même si je passerais le service complet du noyau comme argument ... mais cela fera également l'affaire ...
la source
$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
$this->container->getParameter('kernel.cache_dir')
dans les contrôleurs au lieu de la solution que vous avez fourniecontainer
injecté :) Si vous suivez les meilleures pratiques, l'injectioncontainer
doit être évitée à tout prix. Quant à la solution pour obtenir leweb
répertoire, j'utilise toujours celle que j'ai fournie ci-dessus;)%kernel.project_dir%/web/
au%kernel.root_dir%/../web/
Dans Symfony 3.3, vous pouvez utiliser
pour obtenir la racine web / projet.
la source
Si vous utilisez ce chemin pour accéder à des parties des projets qui ne sont pas du code (par exemple un répertoire de téléchargement ou une base de données SQLite), il peut être préférable de transformer le chemin en paramètre, comme ceci:
Ce paramètre peut être injecté partout où vous en avez besoin, vous n'avez donc plus à vous soucier des chemins dans votre code. En outre, le paramètre peut être remplacé au moment du déploiement. Enfin, chaque programmeur de maintenance aura une meilleure idée de l'utilisation que vous en faites.
Mise à jour: Correction de l'utilisation de la constante kernel.root_dir.
la source
Vous pouvez également utiliser une expression régulière en plus de cela:
la source
Depuis Symfony 3.3, vous pouvez utiliser la liaison, comme
Après cela, vous pouvez utiliser le paramètre $ kernelProjectDir dans n'importe quel contrôleur OU service. Juste comme
la source