Creating Composer Packages
You can make the Code Modules you create into Composer packages, or can create a Composer package for CodeIgniter 4.
Folder Structure
Here’s a typical directory structure for a Composer package:
your-package-name/
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── composer.json
├── src/
│ └── YourClass.php
└── tests/
└── YourClassTest.php
Creating composer.json
In the root of your package directory, create a composer.json file. This file defines metadata about your package and its dependencies.
The composer init
command helps you create it.
For example, composer.json might look like this:
{
"name": "your-vendor/your-package",
"description": "Your package description",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": {
"YourVendor\\YourPackage\\": "src/"
}
},
"authors": [
{
"name": "Your Name",
"email": "yourname@example.com"
}
],
"require": {
// Any dependencies required by your package go here
},
"require-dev": {
// Any development dependencies (e.g., PHPUnit) go here
}
}
Package Name
The name
field is important here. Package names are generally written in the
format “vendor-name/package-name” with all lowercase. Here is a common example:
your-vendor-name
: The name that identifies the vendor (creator of the package), such as your name or your organization.your-package-name
: The name of the package you are creating.
Thus, it is important to make the name unique to distinguish it from other packages. Uniqueness is especially important when publishing.
Namespace
The package name then determines the vendor namespace in autoload.psr4
.
If your package name is your-vendor/your-package
, the vendor namespace must
be YourVendor
. So you would write like the following:
"autoload": {
"psr-4": {
"YourVendor\\YourPackage\\": "src/"
}
},
This setting instructs Composer to autoload the source code for your package.
Choosing License
If you are not familiar with open source licenses, see https://choosealicense.com/. Many PHP packages, including CodeIgniter, use the MIT license.
Preparing Development Tools
There are many tools that help ensure quality code. So you should use them. You can easily install and configure such tools with CodeIgniter DevKit.
Installing DevKit
In the root of your package directory, run the following commands:
composer config minimum-stability dev
composer config prefer-stable true
composer require --dev codeigniter4/devkit
The DevKit installs various Composer packages that helps your development, and installs templates for them in vendor/codeigniter4/devkit/src/Template. Copy the files in it to your project root folder, and edit them for your needs.
Configuring Coding Standards Fixer
DevKit provides Coding Standards Fixer with CodeIgniter Coding Standard based on PHP-CS-Fixer.
Copy vendor/codeigniter4/devkit/src/Template/.php-cs-fixer.dist.php to your project root folder.
Create the build folder for the cache file:
your-package-name/
├── .php-cs-fixer.dist.php
├── build/
Open .php-cs-fixer.dist.php in your editor, and fix the folder path:
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -7,7 +7,7 @@ use PhpCsFixer\Finder;
$finder = Finder::create()
->files()
->in([
- __DIR__ . '/app/',
+ __DIR__ . '/src/',
__DIR__ . '/tests/',
])
->exclude([
That’t it. Now you can run Coding Standards Fixer:
vendor/bin/php-cs-fixer fix --ansi --verbose --diff
If you add scripts.cs-fix
in your composer.json, you can run it with
composer cs-fix
command:
{
// ...
},
"scripts": {
"cs-fix": "php-cs-fixer fix --ansi --verbose --diff"
}
}
Config Files
Allowing Users to Override Settings
If your package has a configuration file and you want users to be able to override
the settings, use config()
with the short classname like config('YourConfig')
to call the configuration file.
Users can then override the package configuration by placing a configuration class
with the same short classname in app/Config that extends the package Config
class like YourVendor\YourPackage\Config\YourConfig
.
Overriding Settings in app/Config
If you need to override or add to known configurations in the app/Config folder, you can use Implicit Registrars.
References
We have published some official packages. You can use these packages as references when creating your own packages: