简体   繁体   中英

Laravel Class 'App\Modules\ServiceProvider' not found?

Hello Friends I am new in Laravel framework.

i create modules directory in app folder.

then i also create ServiceProvider.php file in modules directory.

my file structure like.

app\modules\ServiceProvider.php

This is code of ServiceProvider.php.

<?php 
namespace App\Modules;

abstract class ServiceProvider extends \Illuminate\Support\ServiceProvider {

public function boot() {
    if ($module = $this->getModule(func_get_args())) {
        $this->package("app/" . $module, $module, app_path() . "/modules/" . $module);
    }
}

public function register() {

    if ($module = $this->getModule(func_get_args())) {
        $this->app["config"]->package("app/" . $module, app_path() . "/modules/" . $module . "/config");

        // Add routes
        $routes = app_path() . "/modules/" . $module . "/routes.php";
        if (file_exists($routes))
        require $routes;
    }
}

public function getModule($args) {
    $module = (isset($args[0]) and is_string($args[0])) ? $args[0] : null;
    return $module;
}

}

Then i create a new points directory in modules directory.

and also create ServiceProvider.php file in points directory.

This is ServiceProvider.php file code.

<?php

namespace App\Modules\Points;

class ServiceProvider extends \App\Modules\ServiceProvider {

public function register() {
parent::register("points");
}

public function boot() {
parent::boot("points");
}

}

Then now i try to load project i got error like.

Class 'App\Modules\ServiceProvider' not found 

 Symfony\Component\Debug\Exception\FatalErrorException
…/­app/­modules/­points/­ServiceProvider.php5 

i also add autoload entery in composer.json file like.

"autoload": {
  "classmap": [
    "app/modules"
   ]
 },

Then also run this command.

composer dump-autoload

but then after is not work.

i also register my ServiceProvide in app.php like.

'providers' => array(
       'App\Modules\Points\ServiceProvider'
 ),

please tell where i doing a mistake.

thank you.

I try run your code, and everything works great.

It's a new installation of Laravel 4.1

Obs.: check your vendor/composer/autoload_classmap.php

<?php

// autoload_classmap.php @generated by Composer

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

return array(
    'App\\Modules\\Points\\ServiceProvider' => $baseDir . '/app/modules/points/ServiceProvider.php',
    'App\\Modules\\ServiceProvider' => $baseDir . '/app/modules/ServiceProvider.php',
    'BaseController' => $baseDir . '/app/controllers/BaseController.php',
    'DatabaseSeeder' => $baseDir . '/app/database/seeds/DatabaseSeeder.php',
    'HomeController' => $baseDir . '/app/controllers/HomeController.php',
    'IlluminateQueueClosure' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php',
    'SessionHandlerInterface' => $vendorDir . '/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php',
    'TestCase' => $baseDir . '/app/tests/TestCase.php',
    'User' => $baseDir . '/app/models/User.php',
);

composer.json

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "laravel/framework": "4.1.*"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
      "app/modules",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

app.php

<?php
'providers' => array(

  'Illuminate\Foundation\Providers\ArtisanServiceProvider',
  'Illuminate\Auth\AuthServiceProvider',
  'Illuminate\Cache\CacheServiceProvider',
  'Illuminate\Session\CommandsServiceProvider',
  'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
  'Illuminate\Routing\ControllerServiceProvider',
  'Illuminate\Cookie\CookieServiceProvider',
  'Illuminate\Database\DatabaseServiceProvider',
  'Illuminate\Encryption\EncryptionServiceProvider',
  'Illuminate\Filesystem\FilesystemServiceProvider',
  'Illuminate\Hashing\HashServiceProvider',
  'Illuminate\Html\HtmlServiceProvider',
  'Illuminate\Log\LogServiceProvider',
  'Illuminate\Mail\MailServiceProvider',
  'Illuminate\Database\MigrationServiceProvider',
  'Illuminate\Pagination\PaginationServiceProvider',
  'Illuminate\Queue\QueueServiceProvider',
  'Illuminate\Redis\RedisServiceProvider',
  'Illuminate\Remote\RemoteServiceProvider',
  'Illuminate\Auth\Reminders\ReminderServiceProvider',
  'Illuminate\Database\SeedServiceProvider',
  'Illuminate\Session\SessionServiceProvider',
  'Illuminate\Translation\TranslationServiceProvider',
  'Illuminate\Validation\ValidationServiceProvider',
  'Illuminate\View\ViewServiceProvider',
  'Illuminate\Workbench\WorkbenchServiceProvider',
  'App\Modules\Points\ServiceProvider'
  ),

app/modules/points/ServiceProvider.php

<?php

namespace App\Modules\Points;

class ServiceProvider extends \App\Modules\ServiceProvider {

  public function register() {
    parent::register("points");
  }

  public function boot() {
    parent::boot("points");
  }

}

app/modules/ServiceProvider.php

<?php 

namespace App\Modules;

abstract class ServiceProvider extends \Illuminate\Support\ServiceProvider {

  public function boot() {
    if ($module = $this->getModule(func_get_args())) {
      $this->package("app/" . $module, $module, app_path() . "/modules/" . $module);
    }
  }

  public function register() {

    if ($module = $this->getModule(func_get_args())) {
      $this->app["config"]->package("app/" . $module, app_path() . "/modules/" . $module . "/config");

        // Add routes
      $routes = app_path() . "/modules/" . $module . "/routes.php";
      if (file_exists($routes))
        require $routes;
    }
  }

  public function getModule($args) {
    $module = (isset($args[0]) and is_string($args[0])) ? $args[0] : null;
    return $module;
  }

}

Add this to composer.json autoload section:

"psr-4": {
    "App\\": "app/"
}

and then composer dump-autoload

I have the same issue.

The problem was in the file: ./bootstrap/cache/config.php

I have removed it and everything starts to work: rm ./bootstrap/cache/config.php

My infrastructure located in docker I have run that command in the PHP container.

I'm pretty newbie in creating a package. The first time after I created the following structure, I put it in Vendor folder.

qplot
    environment-color
        src
            config
            QPlot
                EnvironmentColor
                    ColorServiceProvider.php
                    EnvironmentColor.php
        tests

But soon I realized this doesn't make sense, since Laravel won't autoload all the bundles for you unless you registered it. So I moved folder to /app/vendor (new folder).

And then following Andreyco's suggestion to notify autoload path

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/vendor",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},

And then when I run php artisan dump-autoload , and open vendor/composer/autoload_classmap.php , all new classes under QPlot are registered :)

Now when I go back to add the provider to Laravel /app/config/app.php ,

'providers' => array(
    'QPlot\EnvironmentColor\ColorServiceProvider'

So the steps are

  • setup your package in a folder where your git will cover
  • register the autoload in composer
  • composer dump-autoload
  • add provider to config
  • now go back to coding

Execute the command in your project root path

composer dump-autoload

my initial thought was the composer autoload as well, but it didn't feel very Laravel 5ish to me. L5 makes heavy use of Service Providers, they are what bootstraps your application.

To start off I created a folder in my app directory called Helpers. Then within the Helpers folder I added files for functions I wanted to add. Having a folder with multiple files allows us to avoid one big file that gets too long and unmanageable.

Next I created a HelperServiceProvider.php by running the artisan command:

artisan make:provider HelperServiceProvider or php artisan make:provider HelperServiceProvider Within the register method I added this snippet

public function register()
{
    foreach (glob(app_path().'/Helpers/*.php') as $filename){
        require_once($filename);
    }
}

lastly register the service provider in your config/app.php in the providers array

'providers' => [ 'App\\Providers\\HelperServiceProvider', ] now any file in your Helpers directory is loaded, and ready for use.

UPDATE 2016-02-22

There are a lot of good options here, but if my answer works for you, I went ahead and made a package for including helpers this way. You can either use the package for inspiration or feel free to download it with Composer as well. It has some built in helpers that I use often (but which are all inactive by default) and allows you to make your own custom helpers with a simple Artisan generator. It also addresses the suggestion one responder had of using a mapper and allows you to explicitly define the custom helpers to load, or by default, automatically load all PHP files in your helper directory. Feedback and PRs are much appreciated!

composer require browner12/helpers

Add this line top of AgentServiceProvider.php

use Agent;

like:

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Agent;

Source

首先更新您的作曲家,它将修复错误

 $ composer update

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