Was ist der beste Weg, um das Root-App-Verzeichnis aus dem Controller heraus abzurufen? Ist es möglich, es außerhalb des Controllers zu bekommen?
Jetzt erhalte ich es, indem ich es (von Parametern) als Argument wie folgt an den Dienst übergebe:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Gibt es eine bessere und einfachere Möglichkeit, diese Informationen in Symfony2 abzurufen?
php
symfony
symfony-2.8
symfony-config-component
Dawid Ohia
quelle
quelle
%kernel.project_dir%
, um zum Root Ihres Projekts zu gelangen.["%kernel.root_dir%"]
Antworten:
UPDATE 2018-10-21:
Ab dieser Woche
getRootDir()
war veraltet. Bitte verwenden SiegetProjectDir()
stattdessen, wie im Kommentarbereich von Muzaraf Ali vorgeschlagen.-
Benutze das:
Und wenn Sie das Webstamm möchten :
Dies funktioniert mit der Controller-Aktionsmethode ...
EDIT: Was die Dienste betrifft, denke ich, dass die Art und Weise, wie Sie es getan haben, so sauber wie möglich ist, obwohl ich als Argument den vollständigen Kernel-Dienst übergeben würde ... aber dies wird auch den Trick tun ...
quelle
$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
$this->container->getParameter('kernel.cache_dir')
in Controllern anstelle der von Ihnen bereitgestellten Lösungcontainer
injiziert wurde :) Wenn Sie Best Practices befolgen,container
sollte das Injizieren um jeden Preis vermieden werden. Was die Lösung zum Abrufen desweb
Verzeichnisses betrifft , verwende ich immer noch das oben angegebene;)%kernel.project_dir%/web/
%kernel.root_dir%/../web/
In Symfony 3.3 können Sie verwenden
um das Web / Projekt-Root zu bekommen.
quelle
Wenn Sie diesen Pfad verwenden, um auf Teile der Projekte zuzugreifen, die kein Code sind (z. B. ein Upload-Verzeichnis oder eine SQLite-Datenbank), ist es möglicherweise besser, den Pfad in einen Parameter wie den folgenden umzuwandeln:
Dieser Parameter kann überall dort eingefügt werden, wo Sie ihn benötigen, sodass Sie nicht mehr mit Pfaden in Ihrem Code herumspielen müssen. Außerdem kann der Parameter zur Bereitstellungszeit überschrieben werden. Schließlich hat jeder Wartungsprogrammierer eine bessere Vorstellung davon, wofür Sie es verwenden.
Update: Konstante Verwendung von kernel.root_dir behoben.
quelle
Darüber hinaus können Sie auch reguläre Ausdrücke verwenden:
quelle
Seit Symfony 3.3 können Sie Bindungen verwenden, wie z
Danach können Sie den Parameter $ kernelProjectDir in jedem Controller ODER Dienst verwenden. So wie
quelle