Привет друзья Я новичок в Laravel framework.
Я создаю каталог модулей в папке приложения.
то я также создаю файл 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' ),
сообщите, где я делаю ошибку.
Спасибо.
Я пытаюсь запустить ваш код, и все отлично работает.
Это новая установка 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; } }
Добавьте это в раздел автозагрузки composer.json
:
"psr-4": { "App\\": "app/" }
а затем composer dump-autoload
Я довольно новичок в создании пакета. В первый раз после создания следующей структуры я поместил ее в папку 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'
Итак, шаги
Выполните команду в корневом пути проекта
компоновщик-автозагрузка
моя первоначальная мысль тоже была автозагрузкой композитора, но мне это не очень понравилось 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