简体   繁体   中英

PHP Class not found using namespaces

I can't find out why my classes won't load. I am using Composer for psr-4 autoloading and have been using it successfully. Here's how I have my classes setup:

/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",
        }
    }
}

This is the error I keep getting Class 'MyClasses\\Feeds\\Factory\\PullFeedFactory' not found in /var/www/html/testPullFactory.php on line xx

I have other classes that work in the Classes directory with autoload but for some reason cannot get this to work. I feel like it's something glaringly obvious but have been stuck on this for hours now.

UPDATE:

Updated to include my vendor/autoload.php file. Stil getting an error, although it's different now Class 'MyClasses\\Feeds\\Pull\\Providers\\One' not found in /var/www/html/classes/Feeds/Factory/PullFeedFactory.php

in your composer.json, change to

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

Then, execute composer dump-autoload .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM