A Slim 4 skeleton with authentication

0.4.0 2022-01-24 18:27 UTC


A Slim 4 Skeleton.

GitHub commits since tagged version Codacy Badge GitHub Issues GitHub license Total Downloads

This is a simple skeleton to quickly ramp up a slim 4 project.

PHP 8 is required
Composer is required
npm/npx is required

Slim 4 as the core framework
nyholm/psr7 for the PSR-7 implementation
php-di/php-di to manage dependency injection
Cartalyst/Sentinel for user authentication and authorization
delight-im/PHP-I18N for handling the users locale
hellogerard/jobby to run all background jobs through cron
Eloquent/ORM for database storage
EmailValidator for validating email addresses
Middlewares/Trailing-slash to remove any trailing slashes in the url
Monolog for logging
PHPMailer for sending email
Phinx for database migrations
Odan/Session for managing the session
Slim/CSRF to protect against csrf
Slim/Flash for flash messaging
Slim/Twig/Flash (updated and included manually) for displaying flash messages in twig
Slim/Twig-View for templates
Slim/Whoops for displaying errors
Twig-Translate for translations
umpirsky/composer-permissions-handler to set folder permissions for log and cache folders
Vlucas/Valitron for validation

To install using composer

composer create-project darkalchemy/slim-auth

cd into project, edit config/settings.php as needed and create the database.

cd slim-auth
nano config/settings.php

After install

composer migrate   # import database

To update for development

composer install           # install non-dev dependencies
npm install                # install dependencies
npm run build-dev          # create initial js/css resources
composer compile           # compile twig templates
composer migrate           # import database

To update for production

composer install --no-dev  # install non-dev dependencies
npm install                # install dependencies
npm run build              # create initial js/css resources
composer compile           # compile twig templates
composer migrate           # import database

Set up cron job, this is necessary to be able to run scripts as www-data when needed

sudo crontab -e

## add this to root crontab
* * * * * cd /path/to/bin folder/ && /usr/bin/php jobby.php 1>> /dev/null 2>&1

Emails do not get sent directly, they are inserted into the database and jobby will take care of sending them.

Compile twig templates for translating

composer compile

Translate all php files to locale - en_US

composer translate en_US

Add additional locales

## check if locale is installed
locale -a

## find correct local
nano /usr/share/i18n/SUPPORTED

## in order to test the locale switcher, I needed to have another locale translated. I translated
## this using Google Translate, so the translation quality may not be very good. Please consider a
## pull request to improve the quality of the translation.
## add locale if not already installed (fr_FR)
sudo locale-gen fr_FR
sudo locale-gen fr_FR.UTF-8
sudo update-locale

## restart webserver (apache2|nginx)
sudo service nginx restart

## edit bootstrap/container.php and add the correct locale to the 'I18n::class' section
nano bootstrap/container.php

Translate all php files to locale - fr_FR

composer translate fr_FR

Then open locale/**/LC_MESSAGES/messages.po in poedit and edit translation.

Then to create the binary forms of the translations, you need to run again for each locale

composer translate en_EN
composer translate fr_FR


If you want to use redis as your session handler, you should add this to php.ini and uncomment as needed, TCP or Socket

; session.save_handler = redis
; session.save_path    = "tcp://"

; UNIX Socket
; session.save_handler = redis
; session.save_path = "unix:///dev/shm/redis.sock?prefix=SlimAuth:&database=1"

and add this to your redis.ini file


Add these to your apcu.ini


Available command line commands

composer cleanup          # runs php_cs_fixer
composer clear_cache      # clears all file based caches
composer compile          # compile all twig templates
composer create-migration # create new migration class
composer migrate          # migrate the database
composer rollback         # rollback all database changes
composer set-perms        # set writable perms for cache/log folders for both webserver and cli
composer translate [lang] # translate all strings for listed language
composer translate-all    # translate all strings for all currently available languages
npm build                 # create minified js/css resources
npm build-dev             # create js/css resources


phpunit for testing.


Much of what I have done here I learned from watching videos on youtube, Laracasts, Codecourse and from what I have read in many of the online tutorials and Slim Skeletons on github.
Slim4-Skeleton, Slim-Skeleton and Slim4-Starter to list just a few.

I still have a long way to go, but I'm enjoying the trip. This should not be used for any production websites as there are still many things to correct.