我已经构建了一个自定义的MVC框架。 在本地运行正常,当我尝试使其在实时共享托管服务器上运行时,会出现此错误:
浏览器中的错误消息:
致命错误:未捕获错误:在/www/htdocs/user/project/public/index.php中找不到类'App \ Config':19堆栈跟踪:#0 {main}抛出在/ www / htdocs / user中/project/public/index.php,第19行
Composer.json文件:
{
"require": {
"filp/whoops": "^2.3",
"phpmailer/phpmailer": "^6.0"
},
"autoload": {
"psr-4": {
"Core\\": "core/",
"App\\": "app/"
}
}
}
我的文件夹和文件结构:(整个项目位于文件夹“ project”中)
Index.php文件
<?php
/**
* Front controller
*/
use App\Config;
/**
* Composer autoloading
*/
require dirname(__DIR__) . '/vendor/autoload.php';
/**
* Whoops Error and Exception handling
*/
if (Config::SHOW_ERRORS == true){
$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();
}
/**
* Sessions
*/
session_start();
/**
* Routing
*/
$router = new Core\Router();
// Add the routes
$router->add('', ['controller' => 'Home', 'action' => 'index']);
Config.php文件:
<?php
/**
* Application configuration
*/
namespace App;
class Config {
/**
* Database host
* @var string
*/
const DB_HOST = 'localhost';
/**
* Mail SMTP Port
* @var int
*/
const SMTP_PORT = '2525';
}
我部署到服务器的方法:
composer install
(我也尝试过:composer install --no-dev
)我已经重复了几次该程序,但是仍然无法正常工作
答案 0 :(得分:0)
我刚刚尝试做同样的事情,并且看起来可行,请检查以下内容:
/index.php
<?php
require dirname(__DIR__) . '/vendor/autoload.php'; // It must be called first
use App\Config;
echo Config::get('test');
// Result: test
/App/Config.php
namespace App;
class Config
{
public function get($str)
{
return $str;
}
}
答案 1 :(得分:0)
这是区分大小写的问题-您的自动加载规则使用app
作为目录名,但这实际上是App
。这可能对不区分大小写的文件系统(Windows)有效,但对不区分大小写的文件系统(Linux)不起作用。您应该将自动加载规则修改为:
{
"require": {
"filp/whoops": "^2.3",
"phpmailer/phpmailer": "^6.0"
},
"autoload": {
"psr-4": {
"Core\\": "Core/",
"App\\": "App/"
}
}
}