PHPackages                             dmt-software/app-skeleton - 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. dmt-software/app-skeleton

ActiveProject[Framework](/categories/framework)

dmt-software/app-skeleton
=========================

Create a new application based on Slim framework

015PHPCI passing

Since May 19Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/dmt-software/app-skeleton)[ Packagist](https://packagist.org/packages/dmt-software/app-skeleton)[ RSS](/packages/dmt-software-app-skeleton/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Application Skeleton
====================

[](#application-skeleton)

[![build](https://github.com/dmt-software/app-skeleton/actions/workflows/push-action.yml/badge.svg)](https://github.com/dmt-software/app-skeleton/actions/workflows/push-action.yml)

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

[](#installation)

Replace **\[path\]** in the command below to create a new application in that location.

```
composer create-project dmt-software/app-skeleton [path] --stability dev

```

Dependency injection
--------------------

[](#dependency-injection)

Dependency is handled by *Service Providers* which are included within the *App::initServices* method. Within this method you can add more providers that list their dependencies within the *Dependency Container*.

> see [dmt-software/di-plug](https://packagist.org/packages/dmt-software/di-plug) for container implementations that are supported.

### Container

[](#container)

By default, the application uses Pimple container to hold the dependency injection. This can be changed to another container implementation.

#### PHP-DI container

[](#php-di-container)

```
composer remove pimple/pimple
composer require php-di/php-di
```

The container will be auto-discovered, but to ensure the chosen container implementation is used, it can be configured manually.

```
use DMT\Apps\App;
use DMT\DependencyInjection\ContainerFactory;
use DI\Container;
use Slim\Factory\AppFactory;

$app = new App(
    responseFactory: AppFactory::determineResponseFactory(),
    container: (new ContainerFactory())->createContainer(new Container())
);
```

Configuration
-------------

[](#configuration)

### Get/Set

[](#getset)

Configuration options within the configuration can easily be accessed by a dotted-slug.

```
$config->get(); // will return all the options as array
$config->get(option: 'option.slug'); // will return the value stored in Config::options['option']['slug'] if set
$config->get(option: 'not.set.option', default: 'value'); // will return the default when it is not set
```

Setting new options will use the same dotted-slug as option identifier.

```
// all will store the same value in the config
$config->set(value: ['option' => ['slug' => 'value']]);
$config->set(option: 'option', value: ['slug' => 'value']);
$config->set(option: 'option.slug', value: 'value');
```

Setting options within the configuration will use the *array\_replace* strategy.

### Loading configuration

[](#loading-configuration)

The configuration can be loaded from a file. By default, this is a php file that returns an array or a Closure that returns an array containing the configuration options.

```
// file: config/application.php
return static function () {
    return [
        // settings
    ];
};

// within the application or service provider
$config->load('config/application.php');
```

#### Yaml configuration

[](#yaml-configuration)

```
composer require symfony/yaml
```

Use the ChainLoader to enable both file include and yaml config files.

```
use DMT\Config\Loaders\FileLoader;
use DMT\Config\Loaders\FileLoaderInterface;
use DMT\Config\Loaders\LoaderChain;
use Symfony\Component\Yaml\Yaml;

$container->set(
    id: FileLoaderInterface::class,
    value: fn() => new LoaderChain(loaders: [
        new FileLoader(),
        new FileLoader('yaml', Yaml::parseFile(...))
    ])
);
```

###  Health Score

21

—

LowBetter than 18% of packages

Maintenance60

Regular maintenance activity

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 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/ec6b7fbb4d231b5c2c76348cf3a13ec5e82c64a1826142f6ec0db1cf15db2873?d=identicon)[proggeler](/maintainers/proggeler)

---

Top Contributors

[![proggeler](https://avatars.githubusercontent.com/u/18281353?v=4)](https://github.com/proggeler "proggeler (53 commits)")

### Embed Badge

![Health badge](/badges/dmt-software-app-skeleton/health.svg)

```
[![Health](https://phpackages.com/badges/dmt-software-app-skeleton/health.svg)](https://phpackages.com/packages/dmt-software-app-skeleton)
```

###  Alternatives

[laravel/dusk

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

1.9k39.6M298](/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)
