Неустранимая ошибка: неперехваченная ошибка: класс 'App \ Config' не найден - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть сборка MVC Framework.Локально работает нормально, когда я пытаюсь заставить его работать на сервере живого общего хостинга, я получаю эту ошибку:

Сообщение об ошибке в браузере:

Неустранимая ошибка: необработанная ошибка: класс «App \ Config» не найден в /www/htdocs/user/project/public/index.php: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/"
    }
  }
}

Моя папка и структура файла: (Весь проект находится внутри папки: «проект»)

enter image description here

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';
}

Мой метод развертывания на сервере:

  1. ZIP локальные файлы &Экспорт базы данных mysql
  2. загрузка zip на сервер -> распаковать его
  3. загрузить базу данных в phpmyadmin
  4. Изменить учетные данные базы данных в файле конфигурации
  5. запустить composer install (Я также пытался: composer install --no-dev)
  6. Готово

Я гамы повторили эту процедуру несколько раз, но она все еще не работает

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Это проблема чувствительности к регистру - ваши правила автозагрузки используют app в качестве имени каталога, но на самом деле это App.Это может работать на нечувствительных к регистру файловых системах (Windows), но не будет работать на чувствительных к регистру файловых системах (Linux).Вы должны исправить свои правила автозагрузки на:

{
  "require": {
    "filp/whoops": "^2.3",
    "phpmailer/phpmailer": "^6.0"
  },
  "autoload": {
    "psr-4": {
      "Core\\": "Core/",
      "App\\": "App/"
    }
  }
}
0 голосов
/ 21 февраля 2019

Я только что попытался сделать то же самое, и кажется, что работает, проверьте это:

/ 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;
    }
}
...