Как вы определяете пути в приложении? - PullRequest
3 голосов
/ 20 мая 2010

Я использую глобальные константы, например:

/project
    /application
        bootstrap.php
    /public
        index.php

index.php

  • определяет PUBLIC_PATH и APPLICATION_PATH
  • вызывает APPLICATION_PATH. bootstrap.php

bootstrap.php

  • определяет LIBRARY_PATH, MODULES_PATH, TEMP_PATH, CONFIG_PATH, ...
  • делает реальную работу

Также я хочу спросить, есть ли лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 20 мая 2010

По вашему дереву каталогов:

Это тот, который я использовал бы для загрузки PHP скрипта, в основном вы можете поместить его в index.php или в bootstrap.php

define("PROJECT_DISK_PATH", str_replace('\\', '/', dirname(dirname(__FILE__))) . '/');
/*
Server variables $_SERVER['PHP_SELF'] and $_SERVER['SCRIPT_FILE_NAME'] are both USELESS to 
accomplish this task because they both return the currently executed script and not this included file path.
*/

Затем в вашем PHP-скрипте вы делаете:

include(PROJECT_DISK_PATH . 'path/to/your/script/somescript.php')

И это те, которые я бы использовал, чтобы ЗАГРУЗИТЬ скрипт JS / CSS В СТРАНИЦАХ:

define("PROJECT_DOCROOT_PATH", '/' . substr(PROJECT_DISK_PATH, strlen($_SERVER['DOCUMENT_ROOT'] . '/')));
define("PROJECT_HTTP_PATH", "http://" . $_SERVER['HTTP_HOST'] . JPL_DOCROOT_PATH);

Итак, на своей странице вы можете сделать:

   <script type="text/javascript" src="<?php echo PROJECT_DOCROOT_PATH; ?>path/to/your/script/somescript.js"></script>
1 голос
/ 20 мая 2010

Вы имеете в виду, что ваше приложение не является публичным? В любом случае, обычно я просто определяю ROOT константу в моем фронт-контроллере (обычно index.php) следующим образом:

define('ROOT', str_replace('\\', '/', __DIR__));

Или в более старых версиях PHP, где __DIR__ недоступно:

define('ROOT', str_replace('\\', '/', dirname(__FILE__)));

Поскольку внутренняя структура никогда не меняется, я просто делаю что-то вроде:

include(ROOT . '/application/libraries/Email.php');

Вместо:

define('LIBRARY_PATH', ROOT . '/application/libraries');
include(LIBRARY_PATH . '/Email.php');

Меньше загрязнения. =) * * 1016

0 голосов
/ 20 мая 2010

Я иду по абсолютному пути, когда это возможно, используя $_SERVER['DOCUMENT_ROOT']
Когда это невозможно, я использую относительные пути, как и Аликс.

...