Mahdi Younesi
Mahdi Younesi

Reputation: 7489

Class 'Vendor\PackageName\ClassName' not found for newly created Laravel package

I've a problem running my newly created Laravel package which please check out https://github.com/Younesi/laravel-aparat

I can download it via Composer with no problem and it's auto-discovered via Laravel but when I try to use it, It gives me the following error of not finding class.

Class 'Younesi\LaravelAparat\Aparat' not found

My service Provider code is like:

/**
 * Register the service provider.
 *
 * @return void
 */
public function register()
{
    $this->app->bind('aparat', function ($app) {
        return new Aparat;
    });

}

/**
 * Get the services provided by the provider.
 *
 * @return array
 */
public function provides()
{
    return array('aparat');
}

Any help would be appreciated.

Upvotes: 0

Views: 1635

Answers (2)

4givN
4givN

Reputation: 3234

There were some cases with registration problem, cache issues, etc. Try one of these solutions:

  • register your provider (in main composer.json, then in config/app.php [provider & alias] ), then run composer dump-autoload
  • make sure you have initiated your package : go to the folder, then composer init
  • try php artisan config:cache or delete everything in bootstrap/cache/

Upvotes: 0

Marcin Nabiałek
Marcin Nabiałek

Reputation: 111829

Looking at the package it's working fine, in composer.json of that package there is:

 "autoload": {
    "psr-4": {
      "Younesi\\laravelAparat\\": "src"
    }
  },

Notice that laravel is not with capital letter here, so in your code you should import rather this way:

use Younesi\laravelAparat\Aparat;

instead of:

use Younesi\LaravelAparat\Aparat;

I also see that you are author of this package, so I would recommend using standard conversion (namespace starting with capital letter) instead of current namespace.

Looking further at package code, I also see that in service provider there is:

namespace Younesi\LaravelAparat;

namespace so it's nothing weird it won't work if you autoload it with lower-case letter and have namespace with upper-case letter

Upvotes: 1

Related Questions