Как получить корневой каталог приложения?

Как получить корневой каталог приложения в действии?


person Ree    schedule 15.08.2012    source источник


Ответы (3)


Первое, что делает ZF2, это меняет текущий каталог через chdir(dirname(__DIR__));.

Это означает, что каждое будущее включение основано на КОРНЕВОМ ПУТИ вашего приложения, а НЕ на общей папке. Или любую другую текущую папку.

Конечно, это верно только для PHP-файлов.

Если вы хотите определить корневой путь вручную, вы должны перейти к /public/index.php и добавить строку вида define('ROOT_PATH', dirname(__DIR__));

Как я уже говорил, для INCLUDES это НЕ требуется;), так как вы ВСЕГДА находитесь в корневой папке, когда дело доходит до PHP-файлов;)

person Sam    schedule 15.08.2012
comment
Чтобы добавить к хорошему ответу @Sam, если вам нужно знать об URL-адресе, используйте объекты RouteMatch или Request. Они содержат все, что вам нужно знать. - person superdweebie; 16.08.2012
comment
Это действительно для других путей? Я имею в виду, например, если я использую метод chdir, а затем хочу найти файл в файловой системе, например, могу ли я использовать относительные пути, предполагая, что корень приложения является текущим каталогом? - person Asciiom; 30.11.2012
comment
@JeroenMoons Я не очень понимаю твой вопрос. В основном текущий путь равен ZF2-Apps Root. Если вы измените корень через chdir(), тогда все включения PHP будут основаны на назначенном вами пути. Вы всегда можете подняться на более высокий уровень через ../ - person Sam; 30.11.2012
comment
Я имею в виду, скажем, я хочу запустить приложение командной строки для файла, могу ли я без проблем указать относительный путь к файлу на основе корневой папки приложения (приложение командной строки не находит файл)? - person Asciiom; 01.12.2012
comment
Это должно работать, зависит от того, как вы обрабатываете параметры, которые вы передаете в командной строке. Пока все будет относительно, это должно работать как шарм. - person Sam; 01.12.2012
comment
@Sam нужна твоя помощь .. мой вопрос stackoverflow.com/questions/24949200/ - person Anshul Parashar; 25.07.2014

getcwd() работает лучше всего для меня, DIR возвращает корень модуля. Что не очень полезно в этом случае

person Smith    schedule 10.05.2014

@Sam: я не очень понимаю твой вопрос. В основном текущий путь равен ZF2-Apps Root. [...] Вы всегда можете подняться на уровень выше через ../

Не совсем. Когда вы создаете модуль, совместно используемый в нескольких приложениях, например. Модуль FileUpload в поставщике, вне приложения. Вы хотите загрузить файл в подкаталог приложения, а не в общий модуль :) В этом случае __DIR__ соответствует пути модуля, а не пути приложения, и ../ не будет хорошим решением;)

Мне нравится ROOT_PATH, как вы упомянули:

define('ROOT_PATH', dirname(__DIR__));

или еще лучше:

getcwd()
person Ma Si    schedule 02.06.2013
comment
Нет, __DIR__ всегда равно пути к файлу, в котором он используется. Он никогда не меняется. - person demonkoryu; 12.06.2013
comment
О, теперь я понимаю. Этот функционал должен настраиваться обычным конфигом, а не ломкими константами (которые ни одно приложение не обязано поставлять). Иначе весь механизм гибкой настройки ZF2 не имеет смысла. - person demonkoryu; 12.06.2013