A Slim 4 skeleton with authentication
A Slim 4 Skeleton.
This is a simple skeleton to quickly ramp up a slim 4 project.
PHP 7.4 is required
Composer is required
npm 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
Selective/Config to manage config settings
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
uma/redis-session-handler for session handler if using redis for session handling
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
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/bootstrap 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
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/[en_US|fr_FR]/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
; TCP ; session.save_handler = redis ; session.save_path = "tcp://127.0.0.1:6379?database=1" ; UNIX Socket ; session.save_handler = redis ; session.save_path = "unix:///dev/shm/redis.sock?database=1"
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.