当我的php代码部署到heroku时,我的自动加载器功能无法正常工作。我正在使用名称空间。
它在localhost中可以正常工作。我已经对将路径从localhost转换为heroku进行了必要的更改,因为heroku使用/ app作为文档根目录。因此,在以下情况下,BASEURL设置为:
define('BASEURL', $_SERVER['DOCUMENT_ROOT']);
这是初始化文件的一部分:
spl_autoload_register('myAutoLoaderPerson');
function myAutoLoaderPerson($className) {
$path = BASEURL . '/classes/';
$extension = '.class.php';
$fullPath = $path . $className . $extension;
require $fullPath;
}
我在做什么错了?
答案 0 :(得分:0)
您确定正确填写了$_SERVER['DOCUMENT_ROOT'])
吗?
我宁愿建议使用一些相对定义来定义BASEURL
,例如,如果 Document Root 位于定义BASEURL
的文件上方两个文件夹中,则:
define('BASEURL', realpath(__DIR__ . "/../../"));
或者简化自动装带器,使其相对于路径:
spl_autoload_register('myAutoLoaderPerson');
function myAutoLoaderPerson($className) {
require_once __DIR__ . "/../../../classes/$className.class.php";
}
您建议退回/app/classes/lib\foo.class.php
。
请注意/
和\
的混合使用。可能的不同之处在于您在本地windows上,而在远程linux上。
如果遵循PSR-4约定,则意味着您的名称空间应与目录匹配,但是为此,您可能需要将\
转换为/
。
也许是这样的:
spl_autoload_register('myAutoLoaderPerson');
function myAutoLoaderPerson($className) {
require_once __DIR__ . "/../<path..to>/classes/" . strtr($classname, "\\", "/") . ".class.php";
}