【问题标题】:Laravel Service Provider Class Not Found — Server Specific Issue未找到 Laravel 服务提供者类 - 服务器特定问题
【发布时间】:2016-01-02 19:29:18
【问题描述】:

我正在为 Laravel 5 创建一个自定义包,并且遇到了 Laravel 无法为此找到服务提供商的问题,但只能在特定服务器上。在本地,我使用 Homestead 框在 Vagrant 下运行它,它运行良好。使用 git 将其推送到 Dreamhost VPS(Ubuntu),它给了我一个错误,它不能类 Figoliquinn\Quickbooksconnect\QuickbooksconnectServiceProvider。对我来说,这感觉像是一个命名空间问题,因为它在不同环境中的工作方式不同,但我无法找到原因。

包的文件夹结构是(来自 laravel 根目录):

* packages
|--* figoliquinn
   |--* quickbooksconnect
   |--* src
      |--* QuickbooksconnectServiceProvider.php

QuickbooksconnectServiceProvider.php

    <?php namespace Figoliquinn\Quickbooksconnect;

use Figoliquinn\Quickbooksconnect;

use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\Router;

class QuickbooksconnectServiceprovider extends ServiceProvider {


    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = false;

    /**
     * Bootstrap the application events.
     *
     * @return void
     */
    public function boot()
    {   
        // Get the views we'll need
        $this->loadViewsFrom(__DIR__ . '/views', 'quickbooksconnect');

        // Register our controller and routes
        $this->app->router->group(['namespace' => 'Figoliquinn\Quickbooksconnect\Controllers'],
        function(){
            require __DIR__.'/routes.php';
        });
    }


    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {

    }

}

这是我的 composer.json 文件在 Laravel 根目录中的样子:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
        "illuminate/html": "~5.0",
        "guzzlehttp/guzzle": "~5.3|~6.0",
        "doctrine/dbal": "~2.3"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpspec/phpspec": "~2.1"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/",
            "Figoliquinn\\Quickbooksconnect\\": "packages/figoliquinn/quickbooksconnect/src/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ],
        "files": [
            "app/helpers.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-root-package-install": [
            "php -r \"copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

然后在 config/app.php 中添加它时,看起来像(仅缩写为提供程序部分):

'providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Foundation\Providers\ArtisanServiceProvider::class,
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
        Illuminate\Routing\ControllerServiceProvider::class,
        Illuminate\Cookie\CookieServiceProvider::class,
        Illuminate\Database\DatabaseServiceProvider::class,
        Illuminate\Encryption\EncryptionServiceProvider::class,
        Illuminate\Filesystem\FilesystemServiceProvider::class,
        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
        Illuminate\Hashing\HashServiceProvider::class,
        Illuminate\Mail\MailServiceProvider::class,
        Illuminate\Pagination\PaginationServiceProvider::class,
        Illuminate\Pipeline\PipelineServiceProvider::class,
        Illuminate\Queue\QueueServiceProvider::class,
        Illuminate\Redis\RedisServiceProvider::class,
        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
        Illuminate\Session\SessionServiceProvider::class,
        Illuminate\Translation\TranslationServiceProvider::class,
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,
        'Illuminate\Html\HtmlServiceProvider',
        'Figoliquinn\Quickbooksconnect\QuickbooksConnectServiceProvider',

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        'App\Providers\MacrosServiceProvider',
        'App\Providers\CurrentOrgServiceProvider',

    ],

有什么我可能忽略的建议吗?

【问题讨论】:

  • 你扔掉你的自动装载机了吗?
  • 是的。 Figoliquinn 命名空间也出现在 vendor/composer/autoload_psr4.php 中。
  • 嗯。您是否也在生产端这样做?自动加载器通常位于自动添加到 .gitignore 的 vendor 文件夹中
  • 是的,这就是为什么感觉很奇怪。在 laravel 目录的根目录下多次运行 composer dump-autoload。

标签: laravel namespaces packages


【解决方案1】:

最后我真的很愚蠢。我或多或少地包含了一个我试图集成到一个包中的 SDK,并且该 SDK 有一个 .gitignore 文件,该文件导致了一些问题。删除它就可以了。

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2023-04-01
    • 2015-10-31
    • 1970-01-01
    • 2015-09-12
    • 2016-02-14
    • 2014-12-01
    • 2017-01-11
    • 2019-05-29
    相关资源
    最近更新 更多