_  __                          _______        __
 | |/ /__ _ _ __ _ __ ___   __ _|  ___\ \      / /
 | ' // _` | '__| '_ ` _ \ / _` | |_   \ \ /\ / / 
 | . \ (_| | |  | | | | | | (_| |  _|   \ V  V /  
 |_|\_\__,_|_|  |_| |_| |_|\__,_|_|      \_/\_/   
KarmaFW est un mini framework PHP qui gère le routing, les templates et les connexions aux bases SQL.
Composer est nécessaire afin de gérer les autoload des classes PHP.
bin
    app_console.php
config
    config.php
src
    scripts
        my_test_script.php
    Models
    helpers
vendor
    karmasolutions/karmafw
config
    config.php
    routes.php
public
    .htaccess
    index.php
    images
    css
    js
    vendor
src
  Controllers
    MyAppController
    HomeController
  Models
    User
  helpers
    helpers_myapp.php
templates
    homepage.tpl.php
vendor
    karmasolutions/karmafw
Les paramètres de configuration de l'application se déclarent dans le fichier ./config/config.php
Le nom de l'application est à définir dans la variable APP_NAME.
define('APP_NAME', "Mon app PHP");
Les routes se déclarent dans le fichier ./config/routes.php
Chaque route est attribuée à la méthode d'un controller à renseigner.
Le chemin d'accès aux fichiers de templates se fait dans la variable de config TPL_DIR.
define('TPL_DIR', APP_DIR . '/templates');
Les informations de connexions à MySQL se font dans la variable de config DB_DSN.
define('DB_DSN', 'mysql://user:password@localhost/db_name');
$ mkdir /var/www/my_app
$ cd /var/www/my_app
1) Composer
$ composer init
Ajouter ceci dans composer.json :
{
    "repositories": [
        {
            "type": "path",
            "url": "/put/here/the/path/to/karmafw"
        }
    ],
    "require": {
        "karmasolutions/karmafw": "dev-master",
        "filp/whoops": "^2.2@dev"
    }
}
3) DocumentIndex
mkdir -p public
nano public/index.php
<?php
// CONFIG
define('APP_DIR', realpath(__DIR__ . '/..'));
define('VENDOR_DIR', realpath(__DIR__ . '/../vendor'));
// AUTOLOAD
$loader = require VENDOR_DIR . '/autoload.php';
$loader->setPsr4('MyApp\\', __DIR__ . '/../src');
// APP BOOT
\KarmaFW\WebApp::boot();
// YOUR INIT CODE HERE
\KarmaFW\WebApp::getDb()->execute("set names utf8");
// APP ROUTE
\KarmaFW\WebApp::route();
4) App config
Créer le fichier config/config.php et le remplir avec ceci :
mkdir -p config
nano config/config.php
<?php
ini_set('display_errors', 1);
define('APP_NAME', "MyAPP");
define('ENV', "dev");
define('TPL_DIR', APP_DIR . '/templates');
define('DB_DSN', 'mysql://root@localhost/myapp');
Créer le fichier config/routes.php et le remplir avec ceci :
nano config/routes.php
<?php
namespace MyApp\config;
use \KarmaFW\Routing\Router;
// Homepage
Router::get('/', ['MyApp\\Controllers\\HomeController', 'homepage'])->setName('home');
mkdir -p src/Controllers
nano src/Controllers/MyAppController.php
<?php
namespace MyApp\Controllers;
use \KarmaFW\App;
use \KarmaFW\Routing\Controllers\WebAppController;
use \MyApp\Models\User;
class MyAppController extends WebAppController
{
	protected $db;
	protected $user;
	public function __construct($request_uri=null, $request_method=null, $route=null)
	{
		parent::__construct($request_uri, $request_method, $route);
		$this->db = App::getDb();
		if (! empty($this->user_id)) {
			$this->user = User::load($this->user_id);
			$this->template->assign('user', $this->user);
		}
	}
}
nano src/Controllers/HomeController.php
<?php
namespace MyApp\Controllers;
use \KarmaFW\App;
class HomeController extends MyAppController
{
	public function homepage()
	{
		$this->template->assign('title', 'My APP');
		$db = App::getDb();
		$databases = $db->executeSelect('show databases');
		$this->template->assign('databases', $databases);
		$this->template->display('homepage.tpl.php');
	}
	
}
mkdir -p templates
nano templates/homepage.tpl.php
<html>
<head>
	<title>{$title}</title>
</head>
<body>
<h1>hello world</h1>
<pre>
<?php print_r($databases); ?>
</pre>
</body>
</html>
nano templates/layout.tpl.php
<html>
<head>
	<title>{$title}</title>
</head>
<body>
<h1>hello world</h1>
{$child_content}
</body>
</html>
nano templates/homepage2.tpl.php
{layout layout.tpl.php}
<pre>
<?php print_r($databases); ?>
</pre>