# Introduction

Slim Sim est un skeleton basé sur micro framework php Slim, adoptant une architecture MVC simple et efficace, il vous permettera de développer vos sites et applications web dans une structure propre et organisé. L’architecture sous-jacente est construite à l’aide de technologies bien établies et à jour.

Certaines de ces technologies clés :

  • twig-view pour vos pages.
  • doctrine en ORM pour votre base de données.
  • data-fixtures pour les données fictives en base de données.
  • migrations pour les migrations des données en base.
  • validation permet d'utiliser des filtres de validation.
  • csrf pour la sécurité des sessions.
  • php-ref une fonction var_dump amélioré.
  • phpdotenv pour configurer vos environnements de développement et de production.
  • console pour des commandes console propre au framework.
  • monolog pour gérer vos logs.
  • translation le système multilingue.
  • webpack pouvoir compiler, fusion et minification de vos fichiers scss, sass, css et js.
  • cli-menu pour éxécuter les commands via un menu dans votre terminal.

# NOTE

cli-menu utilise l'extension php posix qui n'est pas supporter sur windows, pensez à retirer la ligne suivante dans votre compose.json si vous êtes sur windows :

"php-school/cli-menu": "^3.2"

# Prérequis

Slim Sim se base sur des dépendances demandant une version php récente.

  • MySQL/PostgreSQL/SQLite

Utilisant l'ORM Doctrine, vous devez avoir à disposition une base de données.

Le framework dispose de webpack 4 pour la partie front-end et a besoin d'une version nodejs la plus récente que possible.

  • OS supporté: Linux, MacOS et Windows

Linux et MacOS sont toutefois recommandé.

# Installation

# Composer

$ composer create-project simondevelop/slim-sim <projet_name>
$ cd <projet_name>
$ composer install
$ npm install

# Git

$ git pull https://github.com/SimonDevelop/slim-sim.git <projet_name>
$ cd <projet_name>
$ composer install
$ npm install

Vérifiez que le fichier .env a bien été créé, il s'agit du fichier de configuration de votre environnement ou vous définissez la connexion à la base de données, l'environnement dev ou prod et l'activation du cache de twig. Si jamais le fichier n'a pas été créé, vous pouvez le faire manuellement en dupliquant le fichier .env.example.

N'oubliez pas de vérifier que votre configuration d'environnement de votre base de données corresponde bien et d'autoriser le dossier storage à l'écriture chmod 774 par exemple.

# Configuration

# Apache2

<VirtualHost *:8080>
    ServerName 127.0.0.1:8080
    DocumentRoot "/path/to/project/slim-sim/public/"
    <Directory "/path/to/project/slim-sim/public/">
        Options -Indexes +FollowSymLinks
        AllowOverride all
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>

# Nginx

server {
    listen 8080;
    server_name localhost;
    index index.php;
    root /path/to/project/slim-sim/public;

    error_log /path/to/example.error.log;
    access_log /path/to/example.access.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ ^/.+\.php(/|$) {
        try_files $uri /index.php = 404;
	      fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

# Docker

Vous avez à votre disposition un fichier docker-compose.yml à la racine du projet, adapter les fichiers de configuration de y compris ceux de docker dans le dossier docker puis lancer la commande :

$ docker-compose up -d

# Arborescence

  • app/src/ dossier de l'application
    • Controllers/ dossier des controllers
    • Entity/ dossier des entités doctrine
    • Middlewares/ dossier des middlewares
    • Views/ dossier des vues twig
  • assets/ dossier des fichiers front-end (css/js...)
  • config/ dossier des fichiers de configuration de l'application
    • commands dossier de configuration des commandes terminal
    • translations dossier des fichiers de traduction utilisés dans les vues twig
    • cli-config.php fichier cli pour les commandes doctrine
    • container.php le container des dépendances
    • functions.php les fonctions accessible partout dans le code
    • middlewares.php fichier d'appel des middlewares
    • routes.php fichier des routes
  • public/ dossier public de l'application
  • storage
    • cache/ cache twig de l'application
    • logs/ les logs de monolog
  • tests/ dossier des tests unitaires
  • .env fichier d'environnement base de données
  • console fichier php des commandes cli
  • webpack.config.js fichier de configuration de webpack