Package Manager
, (*1)
Introduction
Package Manager helps reducing the package creation time. Therefore it supports some basic providers for laravel packages., (*2)
This package plays nicely with the laravel plugin seeder package., (*3)
Just create a new plugin with composer create-package ipunkt/laravel-package YOUR-PACKAGE-NAME
and you are able to start with all the package manager supports out of the box., (*4)
Installation
Add this package as dependency by using composer require ipunkt/laravel-package-manager:^1.0
, (*5)
Usage
We suggest using a Package Service Provider extending the Illuminate\Support\AggregateServiceProvider
and register all your package related providers as attribute like so:, (*6)
<?php
namespace MyPackage\Providers;
use Illuminate\Support\AggregateServiceProvider;
class MyPackageServiceProvider extends AggregateServiceProvider
{
/**
* The provider class names.
*
* @var array
*/
protected $providers = [
ConfigProvider::class,
BindingsProvider::class,
ArtisanProvider::class,
MigrationsProvider::class,
TranslationsProvider::class,
BladeProvider::class,
RoutesProvider::class,
ViewProvider::class,
EventsProvider::class,
];
}
And in your composer.json
simply auto-register only your aggregate service provider like so:, (*7)
{
"extra": {
"laravel": {
"providers": [
"MyPackage\\Providers\\MyPackageServiceProvider"
]
}
}
}
Base Service Providers included
We include various service providers for the most common package needs. So you can simply use / extend them and at it to your package service provider., (*8)
Package Configuration
If you want to register package configuration you have to extend the ConfigurationServiceProvider
., (*9)
First of all, please add a protected $packagePath
to your extended service provider class and give it a value for the package root folder like so: protected $packagePath = __DIR__ . '/../../';
. This is necessary to mark your files relative to the package root., (*10)
You have to add your configuration files in attribute $configurationFiles
. File by file as array item. If you want to give an alias for config you have to set is array key. For example:, (*11)
Within your package you have a config/config.php
and you want to have it published and merged as my-package
you have to set it like so, (*12)
'my-package' => 'config/config.php'
, (*13)
Then you can get config values by using config('my-package.)
., (*14)
Routes
For providing routes you have to extend the RouteServiceProvider
., (*15)
First of all, please add a protected $packagePath
to your extended service provider class and give it a value for the package root folder like so: protected $packagePath = __DIR__ . '/../../';
. This is necessary to mark your files relative to the package root., (*16)
Just set $routesNamespace
, $routesMiddleware
and $routesFile
to your needs and you are ready to go. For registering various routes you should have one provider for each type of routes file (api, web, ...)., (*17)
Views / Templates
We provide the ViewServiceProvider
for extension., (*18)
First of all, please add a protected $packagePath
to your extended service provider class and give it a value for the package root folder like so: protected $packagePath = __DIR__ . '/../../';
. This is necessary to mark your files relative to the package root., (*19)
You have to set the $namespace
to your package based identifier. The $templatesFolder
is set to the resources/views
by default, you can override it., (*20)
Database Migrations
We provide the MigrationServiceProvider
to provide database migration files from package., (*21)
First of all, please add a protected $packagePath
to your extended service provider class and give it a value for the package root folder like so: protected $packagePath = __DIR__ . '/../../';
. This is necessary to mark your files relative to the package root., (*22)
You have to set the $migrationsFolder
to your package migrations., (*23)
Translations
We provide the TranslationServiceProvider
for extension., (*24)
First of all, please add a protected $packagePath
to your extended service provider class and give it a value for the package root folder like so: protected $packagePath = __DIR__ . '/../../';
. This is necessary to mark your files relative to the package root., (*25)
You have to set the $namespace
to your package based identifier. The $translationsFolder
is set to the resources/lang
by default, you can override it., (*26)
For the new implemented way for json files we also support the $useJson
flag. When true
the given files have to be json format., (*27)
Artisan Commands
For registering artisan console command we provide the ArtisanServiceProvider
., (*28)
You have to fill the $commands
array with your commands. If you provide a key this key will be the key for registration within the IoC container of laravel. The value should be the command class name like SuperCommand::class
or a string e.g. SuperCommand
which gets resolved to lookup a method registerSuperCommand
within the service provider (protected at least to get called). So you can register more complex commands by using a separate method., (*29)
By default artisan commands will registered only on console runs. If you want to change that behaviour you can overwrite the value of $registerOnlyForConsole
to make that happen., (*30)
Aliases
We provide an AliasServiceProvider
to register all aliases by hand. But you should provide aliases by the new package discovery:, (*31)
{
"extra": {
"laravel": {
"providers": [
"YourProvider"
],
"aliases": {
"Alias": "Path\\To\\Facade"
}
}
},
}
Common Resolutions
Namespace for views, config, translations, ...
Your aggregated package provider should provide a constant namespace identifier for your package. So you can re-use the same value in all your single package providers consistently., (*32)
License
Package Manager is open-sourced software licensed under the MIT license, (*33)