Jaki jest najlepszy sposób uzyskania katalogu głównego aplikacji z wnętrza kontrolera? Czy można go uzyskać poza kontrolerem?
Teraz otrzymuję go, przekazując go (z parametrów) do usługi jako argument, na przykład:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Czy istnieje lepszy, prostszy sposób uzyskania tych informacji w Symfony2?
php
symfony
symfony-2.8
symfony-config-component
Dawid Ohia
źródło
źródło
%kernel.project_dir%
aby dostać się do katalogu głównego projektu.["%kernel.root_dir%"]
Odpowiedzi:
AKTUALIZACJA 21.10.2018:
Od tego tygodnia
getRootDir()
został wycofany. UżyjgetProjectDir()
zamiast tego, jak zasugerował w sekcji komentarzy Muzaraf Ali.—-
Użyj tego:
A jeśli chcesz mieć katalog główny sieci :
to zadziała z metody akcji kontrolera ...
EDYCJA: Jeśli chodzi o usługi, myślę, że sposób, w jaki to zrobiłeś, jest tak czysty, jak to tylko możliwe, chociaż przekazałbym pełną usługę jądra jako argument ... ale to też załatwi sprawę ...
źródło
$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
$this->container->getParameter('kernel.cache_dir')
w kontrolerach zamiast rozwiązania, którecontainer
wstrzyknięcia przez twoją usługę :) Jeśli postępujesz zgodnie z najlepszymi praktykami, wstrzykiwaniacontainer
należy unikać za wszelką cenę. Jeśli chodzi o rozwiązanie pobieraniaweb
katalogu, nadal korzystam z tego, który podałem powyżej;)%kernel.project_dir%/web/
zamiast%kernel.root_dir%/../web/
W Symfony 3.3 możesz użyć
aby uzyskać katalog główny sieci / projektu.
źródło
Jeśli używasz tej ścieżki, aby uzyskać dostęp do części projektów, które nie są kodem (na przykład katalog uploadu lub baza danych SQLite), może być lepiej, aby zmienić ścieżkę w parametr, na przykład:
Ten parametr można wstrzyknąć wszędzie tam, gdzie go potrzebujesz, więc nie musisz już mieszać ze ścieżkami w kodzie. Ponadto parametr można zastąpić w czasie wdrażania. Wreszcie, każdy utrzymujący programista będzie miał lepsze pojęcie, do czego go używasz.
Aktualizacja: Naprawiono stałe użycie kernel.root_dir.
źródło
Oprócz tego możesz również użyć wyrażenia regularnego:
źródło
Od Symfony 3.3 możesz używać wiązania, na przykład
Następnie możesz użyć parametru $ kernelProjectDir w dowolnym kontrolerze LUB usłudze. Tak jak
źródło