Laravel Class 'App\Modules\ServiceProvider' не найден?

Привет, друзья. Я новичок в области Laravel.

i создаю каталог модулей в папке приложения.

то я также создаю файл 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;
}

}

Затем я создаю новый каталог точек в каталоге модулей.

а также создайте файл 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

но потом не работает.

Я также зарегистрирую свой ServiceProvide в app.php как.

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

сообщите, где я делаю ошибку.

спасибо.

Ответ 1

Я пытаюсь запустить ваш код, и все отлично работает.

Это новая установка Laravel 4.1

Обозначение: проверьте 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'
  ),

приложения/модули/точки/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");
  }

}

приложения/модули/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;
  }

}

Ответ 2

Добавьте это в раздел composer.json автозагрузки:

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

а затем composer dump-autoload

Ответ 3

Я очень новичок в создании пакета. В первый раз после создания следующей структуры я поместил ее в папку Vendor.

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

Но вскоре я понял, что это не имеет смысла, поскольку Laravel не будет автоматически загружать все пакеты для вас, если вы не зарегистрировали его. Поэтому я переместил папку в /app/vendor (новая папка).

И затем, следуя совету Андрея, уведомить об автозагрузке

"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 будет охватывать
  • зарегистрировать автозагрузку в компоновщике
  • композитор dump-autoload
  • добавить поставщика в конфигурацию
  • вернемся к кодированию

Ответ 4

Выполнение команды в корневом пути проекта

композитор dump-autoload

Ответ 5

моя первоначальная мысль была автозагрузкой композитора, но мне это не очень понравилось Laravel 5ish. L5 сильно использует сервис-провайдеров, это то, что загружает ваше приложение.

Для начала я создал папку в моем каталоге приложений под названием Helpers. Затем в папке "Помощники" я добавил файлы для функций, которые я хотел добавить. Наличие папки с несколькими файлами позволяет избежать того, что один большой файл становится слишком длинным и неуправляемым.

Затем я создал HelperServiceProvider.php, выполнив команду artisan:

artisan make: поставщик HelperServiceProvider или php artisan make: поставщик HelperServiceProvider В методе register я добавил этот фрагмент

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

окончательно зарегистрируйте поставщика услуг в вашем config/app.php в массиве поставщиков

'providers' = > [   'App\Providers\HelperServiceProvider', ] теперь загружается любой файл в вашем справочном каталоге и готов к использованию.

ОБНОВЛЕНИЕ 2016-02-22

Здесь есть много хороших вариантов, но если мой ответ работает на вас, я пошел вперед и сделал пакет для включения помощников таким образом. Вы можете использовать пакет для вдохновения или не стесняйтесь загружать его вместе с Composer. В нем есть встроенные помощники, которые я часто использую (но все они неактивны по умолчанию) и позволяет создавать собственные пользовательские помощники с простым генератором Artisan. Он также учитывает предположение, что один ответчик имел использование mapper и позволяет вам явно определять пользовательские помощники для загрузки или по умолчанию автоматически загружать все PHP файлы в ваш справочный каталог. Обратная связь и PR очень ценятся!

требуется композитор browner12/helpers