Класс PHP не найден с использованием пространств имен - PullRequest
0 голосов
/ 15 октября 2018

Я не могу понять, почему мои классы не загружаются.Я использую Composer для автозагрузки PSR-4 и успешно его использую.Вот как я настраиваю свои классы:

/ project
/ classes
/ feeds
/ pull
/ factory
composer.json
testMyFactory.php

feeds / factory / FeedFactory.php

namespace MyClasses\Feeds\Factory;

interface FeedFactory
{
    public function build($provider);
}

feeds / factory / PullFeedFactory.php

namespace MyClasses\Feeds\Factory;

use MyClasses\Feeds\Factory\FeedFactory;
use MyClasses\Feeds\Pull\Providers\One;

/**
 * Class FeedFactory
 */

class PullFeedFactory implements FeedFactory
{
    public function __construct(){}

    /**
     * Build provider object for factory
     * @param string $provider Type of feed provider to return
     * @return Object Provider object
     */

    public function build($provider) {
        switch ($provider) {
            case 'one':
                $provider = new One();
                break;
            default:
                $provider = new One`();
                break;
        }

        return $provider;
    }
}

project / feeds / pull / One.php

namespace MyClasses\Feeds\Pull\Providers;

class One
{
    public function pull() {
        echo 'Pull One';
    }
}

project / testMyFactory.php

require __DIR__ . '/vendor/autoload.php';

use MyClasses\Feeds\Factory\PullFeedFactory;  

$feed = new PullFeedFactory();
$feed->build('one');
$feed->pull();

project / composer.json

{
    "require": {
      //Remove for example       
    },
    "config": {
        "preferred-install": "dist"
    },
    "require-dev": {
    },
    "autoload": {
        "psr-4": {
            "MyClasses\\": "./classes",
        }
    }
}

Это ошибка, которую я продолжаю получать Class 'MyClasses\Feeds\Factory\PullFeedFactory' not found in /var/www/html/testPullFactory.php on line xx

У меня естьдругие классы, которые работают в каталоге Classes с автозагрузкой, но по какой-то причине не могут заставить это работать.Я чувствую, что это что-то явно очевидное, но я застрял на этом часами.

ОБНОВЛЕНИЕ:

Обновлено, чтобы включить мой файл vendor / autoload.php.Стил получает ошибку, хотя теперь она другая Class 'MyClasses\Feeds\Pull\Providers\One' not found in /var/www/html/classes/Feeds/Factory/PullFeedFactory.php

1 Ответ

0 голосов
/ 15 октября 2018

в вашем composer.json измените на

"autoload": {
        "psr-4": {
            "MyClasses\\": "classes/",
        }
    }

Затем выполните composer dump-autoload.

...