【问题标题】:Laravel Class 'App\Modules\ServiceProvider' not found?未找到 Laravel 类“App\Modules\ServiceProvider”?
【发布时间】:2020-07-06 12:43:18
【问题描述】:

朋友们好,我是 Laravel 框架的新手。

我在 app 文件夹中创建模块目录。

然后我还在模块目录中创建 ServiceProvider.php 文件。

我的文件结构喜欢。

app\modules\ServiceProvider.php

这是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;
}

}

然后我在模块目录中创建一个新的点目录。

并在 points 目录中创建 ServiceProvider.php 文件。

这是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");
}

}

然后我现在尝试加载项目,但出现错误。

Class 'App\Modules\ServiceProvider' not found 

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

我还在composer.json文件中添加了自动加载输入。

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

然后也运行这个命令。

composer dump-autoload

但是之后是行不通的。

我还在 app.php 中注册了我的 ServiceProvide。

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

请告诉我哪里做错了。

谢谢。

【问题讨论】:

    标签: php laravel-4


    【解决方案1】:

    我尝试运行您的代码,一切正常。

    这是 Laravel 4.1 的全新安装

    Obs.:检查您的 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;
      }
    
    }
    

    【讨论】:

    • @renishkhunt 你的代码和我的一样吗?检查您的autoload_classmap.php
    • 感谢autoload_classmap.php,看了之后发现我修改了错误的composer.json
    【解决方案2】:

    我也有同样的问题。

    问题出在文件中:./bootstrap/cache/config.php

    我已经删除了它,一切都开始工作了:rm ./bootstrap/cache/config.php

    我的基础设施位于 docker 中,我已经在 PHP 容器中运行了该命令。

    【讨论】:

    • 这对我有用。使用工匠命令清除缓存每次都会失败,但删除这些文件是有效的。
    【解决方案3】:

    将此添加到composer.json 自动加载部分:

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

    然后composer dump-autoload

    【讨论】:

    • 也许可以试试psr-0psr-4 将无法工作,除非您拥有当前版本的 Composer。所以八点psr-0composer self-update
    【解决方案4】:

    我是创建包的新手。第一次创建以下结构后,我将其放在 Vendor 文件夹中。

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

    但很快我意识到这没有意义,因为 Laravel 不会为你自动加载所有的包,除非你注册它。所以我将文件夹移动到 /app/vendor(新文件夹)。

    然后按照 Andreyco 的建议通知自动加载路径

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

    然后当我运行php artisan dump-autoload 并打开vendor/composer/autoload_classmap.php 时,QPlot 下的所有新类都已注册:)

    现在当我返回将提供程序添加到 Laravel /app/config/app.php 时,

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

    所以步骤是

    • 在你的 git 将覆盖的文件夹中设置你的包
    • 在 composer 中注册自动加载
    • 作曲家转储自动加载
    • 将提供程序添加到配置
    • 现在回到编码

    【讨论】:

      【解决方案5】:

      在你的项目根路径下执行命令

      作曲家转储自动加载

      【讨论】:

        【解决方案6】:

        我最初的想法也是作曲家自动加载,但我觉得 Laravel 5ish 不太好。 L5 大量使用 Service Providers,它们是您应用程序的引导程序。

        首先,我在我的应用程序目录中创建了一个名为 Helpers 的文件夹。然后在 Helpers 文件夹中,我为我想要添加的功能添加了文件。拥有一个包含多个文件的文件夹可以让我们避免一个大文件变得太长且难以管理。

        接下来我通过运行 artisan 命令创建了一个 HelperServiceProvider.php:

        artisan make:provider HelperServiceProvider 或 php artisan make:provider HelperServiceProvider 在注册方法中,我添加了这个 sn-p

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

        最后在 providers 数组的 config/app.php 中注册服务提供者

        '提供者' => [ 'App\Providers\HelperServiceProvider', ] 现在您的 Helpers 目录中的所有文件都已加载,可以使用了。

        2016 年 2 月 22 日更新

        这里有很多不错的选择,但如果我的回答对你有用,我会继续制作一个包,以这种方式包含助手。您可以使用该软件包来获取灵感,也可以随时使用 Composer 下载它。它有一些我经常使用的内置助手(但默认情况下它们都是不活动的),并允许您使用简单的 Artisan 生成器制作自己的自定义助手。它还解决了响应者使用映射器的建议,并允许您明确定义要加载的自定义帮助程序,或者默认情况下自动加载帮助程序目录中的所有 PHP 文件。非常感谢您的反馈和 PR!

        作曲家需要 browner12/helpers

        【讨论】:

          【解决方案7】:

          在 AgentServiceProvider.php 中添加这一行

          使用代理;

          喜欢:

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

          Source

          【讨论】:

            猜你喜欢
            • 2018-04-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-18
            • 2023-04-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-25
            相关资源
            最近更新 更多