PHPackages                             martynbiz/slim3-module - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. martynbiz/slim3-module

ActiveLibrary[Framework](/categories/framework)

martynbiz/slim3-module
======================

A simple class for loading modules in a Slim 3 project

62052[1 issues](https://github.com/martynbiz/slim3-module/issues)PHP

Since Jun 9Pushed 10y ago3 watchersCompare

[ Source](https://github.com/martynbiz/slim3-module)[ Packagist](https://packagist.org/packages/martynbiz/slim3-module)[ RSS](/packages/martynbiz-slim3-module/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Slim v3 module
==============

[](#slim-v3-module)

Introduction
------------

[](#introduction)

Modules for Slim3

Installation
------------

[](#installation)

Composer

```
"require-dev": {
    "martynbiz/slim3-module": "dev-master"
}
```

Getting started
---------------

[](#getting-started)

This library expects a directory within the modules directory, and within that module a {module\_name}/Module class:

```
modules/
├── Hello
│   └── Module.php

```

public/index.php

```
$moduleInitializer = new \MartynBiz\Slim3Module\Initializer($app, [
    'autoload' => [ //  '/path/to/modules',
]);

$moduleInitializer->initModules();
```

composer.json

TODO add path to namespace e.g. App/Module

/path/to/modules/Hello/Module.php

```
namespace Hello;

use Slim\App;
use MartynBiz\Slim3Module\AbstractModule;

class Module extends AbstractModule
{
    public function initRoutes(App $app)
    {
        $app->get('/hello/{name}', function ($request, $response) {
            $name = $request->getAttribute('name');
            $response->getBody()->write("Hello, $name");

            return $response;
        });
    }
}
```

Advanced usage
--------------

[](#advanced-usage)

It is possible for moodules to use libraries of other modules. To allow this, module initializer will load modules in the following order:

1. Initiate class maps for all modules
2. Import settings from all modules
3. Initiate dependencies for all modules
4. Initiate app middleware for all modules
5. Lastly, initiate routes for all modules

To configure modules, simple override the methods of the AbstractModule class:

```
namespace Hello;

use Composer\Autoload\ClassLoader;
use Slim\App;
use Slim\Container;
use MartynBiz\Slim3Module\AbstractModule;

class Module extends AbstractModule
{
    public function getModuleConfig()
    {
        return [
            'logger' => [
                //...
            ],
        ];
    }

    public function initClassLoader(ClassLoader $classLoader)
    {
        $classLoader->setPsr4("Hello\\", __DIR__ . "/src");
    }

    public function initDependencies(Container $container)
    {
        $container['logger'] = function ($c) {
            $settings = $c->get('settings')['logger'];
            $logger = new \Monolog\Logger($settings['name']);
            $logger->pushProcessor(new \Monolog\Processor\UidProcessor());
            $logger->pushHandler(new \Monolog\Handler\StreamHandler($settings['path'], \Monolog\Logger::DEBUG));
            return $logger;
        };

        //...
    }

    public function initMiddleware(App $app)
    {
        //...
    }

    public function initRoutes(App $app)
    {
        $app->get('/hello/{name}', function ($request, $response) {
            $name = $request->getAttribute('name');
            $response->getBody()->write("Hello, $name");

            return $response;
        });
    }
}
```

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance17

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/c1a27a170ef279c7363e50281f05711095a652ec6489eb060872022a9887ce8a?d=identicon)[martynbiz](/maintainers/martynbiz)

---

Top Contributors

[![martynbiz](https://avatars.githubusercontent.com/u/6215352?v=4)](https://github.com/martynbiz "martynbiz (10 commits)")

### Embed Badge

![Health badge](/badges/martynbiz-slim3-module/health.svg)

```
[![Health](https://phpackages.com/badges/martynbiz-slim3-module/health.svg)](https://phpackages.com/packages/martynbiz-slim3-module)
```

###  Alternatives

[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k104.3M836](/packages/laravel-socialite)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k38.6M289](/packages/laravel-dusk)[nineinchnick/edatatables

Grid widget for the Yii Framework, wrapper for the DataTables jQuery plugin

173.2k](/packages/nineinchnick-edatatables)[link-cloud/fast-hyperf

LinkCloud Fast Hyperf

241.2k1](/packages/link-cloud-fast-hyperf)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
