- About osmphp/core
- Prerequisites
- Installation
- Getting Started
- Using The Library
- Contributing
- License
- Commercial License & Support
osmphp/core enables modular software development in any PHP project - dividing
the application code into modules - reusable, extensible and pluggable parts.
A module is a directory responsible for a single feature or concept of your application. For example one module may handle products in e-commerce application, another - authorize users into the application's restricted area, yet another one - enable the application to be used in the command line, and so on.
osmphp/core is different from other frameworks in several ways:
- Unprecedented extensibility. From your module, add new and modify existing (even protected) methods of any other module class.
- Smaller footprint, faster execution. Class property values are computed only when (and if) they are accessed, unless you explicitly assign them.
- Simple object instantiation. Classes know and use their default dependencies, you don't have to pass them when creating an object. Unless you want to, for example, when mocking a dependency in a unit test. It also completely removes the hassle of configuring a dependency injection container.
- Auto-wiring. Plug-in your class into the application just by extending a certain class, or by adding an attribute. The application intimately knows the class definitions of all the modules, and wires them together without additional configuration files.
This library requires:
- PHP 8
mbstringextension
- Composer
Install them if necessary.
Install the osmphp/core Composer package:
composer require osmphp/core
Prepare the project for using the library as described below. In the future, this package will come preinstalled with a project template, and you will not have to write this boilerplate code.
-
Create an application class in the
src/App.phpfile (assuming that your project is configured to autoload theApp\namespace from thesrc/directory; if it's not the case, adjust the code snippets accordingly):<?php declare(strict_types=1); namespace App; use Osm\Core\App as BaseApp; class App extends BaseApp { } -
Create a module group class and in the
src/ModuleGroup.php:<?php declare(strict_types=1); namespace App; use Osm\Core\ModuleGroup as BaseModuleGroup; class ModuleGroup extends BaseModuleGroup { } -
Compile the application (in Windows, use
\instead of/):php vendor/osmphp/core/bin/compile.php App\App -
In your entry point file
public/index.php(there may be more than one entry point file, add the following to every one of them), make sure that the code is executed in context of the application object:<?php declare(strict_types=1); use Osm\Runtime\Apps; use App\App; ... Apps::$project_path = dirname(__DIR__); Apps::run(Apps::create(App::class), function() { ... });
Documentation is a work in progress. This section will be updated once it is ready.
Your help is really welcome, be it a reported bug, an occasional pull request, or the full fledged participation. To get started, open an issue and tell us that you want to be a part of it, and we'll get in touch.
The osmphp/core package is open-sourced software licensed under the GPL v3 license.
In case the open source license if not a good fit for you, or if you need support, let me know.