PHPackages                             robiningelbrecht/symfony-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. robiningelbrecht/symfony-skeleton

ActiveProject[Framework](/categories/framework)

robiningelbrecht/symfony-skeleton
=================================

A Symfony skeleton I use to bootstrap new projects

1.0.0(1y ago)15MITPHPPHP &gt;=8.3

Since Dec 10Pushed 1y ago1 watchersCompare

[ Source](https://github.com/robiningelbrecht/symfony-skeleton)[ Packagist](https://packagist.org/packages/robiningelbrecht/symfony-skeleton)[ RSS](/packages/robiningelbrecht-symfony-skeleton/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (26)Versions (2)Used By (0)

Symfony Skeleton
================

[](#symfony-skeleton)

[![CI](https://github.com/robiningelbrecht/symfony-skeleton/actions/workflows/ci.yml/badge.svg)](https://github.com/robiningelbrecht/symfony-skeleton/actions/workflows/ci.yml)[![PHP](https://camo.githubusercontent.com/170c5f4e121ff4980190c301f5d0db0c8d008671337e7ee68a6a77c2ec29b39b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f726f62696e696e67656c6272656368742f73796d666f6e792d736b656c65746f6e2f7068702e7376673f636f6c6f723d253233373737626233266c6f676f3d706870266c6f676f436f6c6f723d77686974652676657273696f6e3d6465762d6d6173746572)](https://php.net/)[![Symfony](https://camo.githubusercontent.com/1c7e233c2470111e896257b7a7876e44b92118b4fec39ccdde7164ee8f6b56c7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f726f62696e696e67656c6272656368742f73796d666f6e792d736b656c65746f6e2f73796d666f6e792532466672616d65776f726b2d62756e646c653f6c6f676f3d73796d666f6e79266c6162656c3d73796d666f6e792676657273696f6e3d6465762d6d6173746572)](https://symfony.com/)[![PHPStan Enabled](https://camo.githubusercontent.com/7c219a5c63f80448c1ee588309d73243e25ac4fcfb85005eb7a422db2efff993/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c25323031302d7375636365732e7376673f6c6f676f3d706870266c6f676f436f6c6f723d776869746526636f6c6f723d333143363532)](https://phpstan.org/) [![License](https://camo.githubusercontent.com/fad5bdc269d91128ae2ad0f1c89414274c217c582d8f93db146b88d79e191e01/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f726f62696e696e67656c6272656368742f73796d666f6e792d736b656c65746f6e3f636f6c6f723d343238663765266c6f676f3d6f70656e253230736f75726365253230696e6974696174697665266c6f676f436f6c6f723d7768697465)](https://github.com/robiningelbrecht/symfony-skeleton/blob/master/LICENSE)

---

Bootstrap new project
---------------------

[](#bootstrap-new-project)

```
> composer create-project robiningelbrecht/symfony-skeleton [app-name] --no-install --ignore-platform-reqs
```

Open `.env` and set following ENV VARIABLES:

```
DOCKER_CONTAINER_BASE_NAME=skeleton
DOCKER_MYSQL_PORT=3306
DOCKER_NGINX_PORT=8081

```

```
# Install dependencies
> make composer arg="install"
# Setup project (configure containers and functionality)
> make console arg="app:setup"
```

```
# Build docker containers
> make build-containers
```

Makefile
--------

[](#makefile)

There are some predefined commands in the `Makefile`:

```
# Run test suite
> make phpunit
# Run cs fixer
> make csfix
# Run PHPstan
> make phpstan
# Create and run migrations
> make migrate-diff
> make migrate-run
# Run a console command
> make console arg="your:fancy:command"
```

Events
------

[](#events)

### Recording Events

[](#recording-events)

In your entity `use RecordsEvents;` and record events when needed:

```
class User
{
    use RecordsEvents;

    public static function create(
        UserId $id,
    ): self {
        // ...
        $user->recordThat(new UserWasCreated(
            userId: $user->getUserId(),
        ));

        return $user;
    }
}
```

### Publishing Events

[](#publishing-events)

In your repository, inject the `EventBus` and publish the recorded events:

```
final readonly class UserRepository implements CommandHandler
{
    public function __construct(
        private EventBus $eventBus,
    ) {
    }

    public function save(User $user): void
    {
        // ...
        $this->eventBus->publishEvents($user->getRecordedEvents());
    }
```

### Registering Event Listeners

[](#registering-event-listeners)

Create a manager / event listener and add the `AsEventListener` attribute:

```
final readonly class UserEmailManager
{
    #[AsEventListener]
    public function reactToUserWasCreated(UserWasCreated $event): void
    {
        // ...
    }
}
```

More info: [https://symfony.com/doc/current/event\_dispatcher.html#defining-event-listeners-with-php-attributes](https://symfony.com/doc/current/event_dispatcher.html#defining-event-listeners-with-php-attributes)

Rate Limiter
------------

[](#rate-limiter)

Create a Rate Limiter
---------------------

[](#create-a-rate-limiter)

Define a new rate limiter in `config/packages/rate_limiter.yaml`:

```
framework:
  rate_limiter:
    anonymous:
      policy: 'sliding_window'
      limit: 100
      interval: '60 minutes'
```

Apply a limiter to a route
--------------------------

[](#apply-a-limiter-to-a-route)

Then apply it to the necessary routes:

```
    #[RateLimiter('anonymous')]
    #[Route(path: '/your/important/route', methods: ['GET', 'POST'])]
    public function handle(Request $request): Response
    {
      // ...
    }
```

more info: [https://symfony.com/doc/current/rate\_limiter.html](https://symfony.com/doc/current/rate_limiter.html)

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance39

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity53

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.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

516d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8c460d3d078ca95a2f552ae1eb15d4fb916781d264149a1d5ca503fe69967b91?d=identicon)[robiningelbrecht](/maintainers/robiningelbrecht)

---

Top Contributors

[![robiningelbrecht](https://avatars.githubusercontent.com/u/203894?v=4)](https://github.com/robiningelbrecht "robiningelbrecht (45 commits)")

---

Tags

skeletonsymfonyphpsymfonySkeleton

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/robiningelbrecht-symfony-skeleton/health.svg)

```
[![Health](https://phpackages.com/badges/robiningelbrecht-symfony-skeleton/health.svg)](https://phpackages.com/packages/robiningelbrecht-symfony-skeleton)
```

###  Alternatives

[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M650](/packages/sylius-sylius)[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)[open-dxp/opendxp

Content &amp; Product Management Framework (CMS/PIM)

7310.3k29](/packages/open-dxp-opendxp)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)

PHPackages © 2026

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