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