_ __ _______ __
| |/ /__ _ _ __ _ __ ___ __ _| ___\ \ / /
| ' // _` | '__| '_ ` _ \ / _` | |_ \ \ /\ / /
| . \ (_| | | | | | | | | (_| | _| \ V V /
|_|\_\__,_|_| |_| |_| |_|\__,_|_| \_/\_/
KarmaFW est un mini framework PHP qui gère le routing, les templates et les connexions aux bases SQL.
- Routing Web
- Templates PHP/HTML
- Connexions SQL
- FileUpload web
- Envoi d'emails (SMTP)
- Paiements: Paypal, Payplug, Stripe
- Auth: GoogleAuthenticator, SmsAuthenticator
- PDF: création de PDF (HTML to PDF)
- SMS: Envoi de SMS (Free & SmsEnvoi.com)
- Hooks PHP
- Bitly: génération d'url bit.ly
Composer est nécessaire afin de gérer les autoload des classes PHP.
Structure d'une app console
bin
app_console.php
config
config.php
src
scripts
my_test_script.php
Models
helpers
vendor
karmasolutions/karmafw
Structure d'une app web
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
- 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"
}
}
- 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();
- 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>
fichiers de conf (config.php & routes.php) page 404 erreurs et exceptions (page 500)
url rewriting title, meta desc, h1, canonical liens robots.txt sitemap.xml
opcache, memcache/redis cache de templates minimify/combine css & js gzip etag + not_modified_304 + expire cdn
traffic logguer google analytics google webmaster tools