docs: add Creating Composer Packages

This commit is contained in:
kenjis 2023-07-28 10:24:38 +09:00
parent f8bdf2c851
commit ce3cce5552
No known key found for this signature in database
GPG Key ID: BD254878922AF198
3 changed files with 115 additions and 1 deletions

View File

@ -0,0 +1,109 @@
##########################
Creating Composer Packages
##########################
You can make the :doc:`../general/modules` you create into Composer packages,
or can create a Composer package for CodeIgniter 4.
.. contents::
:local:
:depth: 2
****************
Folder Structure
****************
Here's a typical directory structure for a Composer package::
your-package-name/
├── 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 the name of you or your organization.
- ``your-package-name``: The name of the package you are creating.
Thus, it is important to make the name unique and 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.
************
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 :php:func:`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 :ref:`Implicit Registrars <registrars>`.

View File

@ -12,4 +12,5 @@ CodeIgniter 4 has been designed to be easy to extend or build upon.
events
basecontroller
authentication
composer_packages
contributing

View File

@ -3,10 +3,14 @@ Code Modules
############
CodeIgniter supports a form of code modularization to help you create reusable code. Modules are typically
centered around a specific subject, and can be thought of as mini-applications within your larger application. Any
centered around a specific subject, and can be thought of as mini-applications within your larger application.
Any
of the standard file types within the framework are supported, like controllers, models, views, config files, helpers,
language files, etc. Modules may contain as few, or as many, of these as you like.
If you want to create a module as a Composer package, see also :doc:`../extending/composer_packages`.
.. contents::
:local:
:depth: 2