Проблема с загрузкой класса с php composer - PullRequest
0 голосов
/ 14 сентября 2018

У меня такой каталог сайтов:

- my application
- apps
--- Backend
--- Core
---- Core \ Config
---- Core \ Drivers (Db.php)
---- Core \ Main
--- Frontend

Мой файл composer.json:

{
    "autoload": {
        "psr-4": {
            "Core\\": "apps/Core/",
            "Web\\": "apps/Frontend",
            "Cms\\": "apps/Backend"
        }
    },
    "require": {
        "php": ">=7.0",
        "phpmailer/phpmailer": "~6.0",
        "monolog/monolog": "~1.23",
        "mpdf/mpdf": "~7.0",
        "twig/twig": "~2.5"
    },
    "config": {
        "vendor-dir": "apps/vendor"
    }
}

В тот момент, когда я хочу вызвать свое приложение \ secret \ index.php в файл:

require_once ("../apps/vendor/autoload.php");
use Core\Drivers;
use Core\Main;
$bl = new Core\Drivers\Db();

Файл Db.php выглядит следующим образом:

namespace Core\Drivers;


class Db
{

...

}

Я получаю сообщение об ошибке:

Неустранимая ошибка: необученная ошибка: класс 'Core \ Drivers \ Db' не найден в

Почему?

EDIT

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir));

return array(
    'Web\\' => array($baseDir . '/apps/Frontend'),
    'Twig\\' => array($vendorDir . '/twig/twig/src'),
    'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
    'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
    'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
    'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
    'Mpdf\\' => array($vendorDir . '/mpdf/mpdf/src'),
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
    'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
    'Core\\' => array($baseDir . '/apps/Core'),
    'Cms\\' => array($baseDir . '/apps/Backend'),
);

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Все выглядит довольно круто, но я бы посоветовал вам изменить содержание secret/index.php на:

require_once __DIR__.'/../apps/vendor/autoload.php';   //A cleaner approach for requiring files

use Core\Drivers\Db;    //So, you don't have to use slash when using your class in your code.
use Core\Main;

$bl = new Db();
0 голосов
/ 14 сентября 2018

использовать из корневого каталога следующим образом:

use \Core\Drivers;
use \Core\Main;
$bl = new \Core\Drivers\Db();

Использовать из корневого каталога php будет искать указанные классы в текущем пространстве имен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...