lite-cms / liteframework
LiteFramework is a fast and simple framework for PHP.
v0.5.1
2022-09-03 18:55 UTC
Requires
- php: >=7.3
- ext-ctype: *
- ext-json: *
- ext-mbstring: *
- catfan/medoo: ^2.1
- monolog/monolog: ^2.8
- neitanod/forceutf8: ^2.0
- psr/log: ^1.1
Requires (Dev)
README
Installation
composer require lite-cms/liteframework
For Apache .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
Examples
Basic
require('vendor/autoload.php'); use LiteFramework\Framework; Framework::init($_SERVER['DOCUMENT_ROOT'], dirname($_SERVER['SCRIPT_FILENAME'])); Framework::route('/', function() { Framework::$response->write('Hello, World!'); Framework::$response->send(); }); Framework::run();
Custom error page
Framework::onError(function(int $statusCode, string $statusMessage) { Framework::$response->status($statusCode); Framework::$response->write('<h1>Custom Error '.$statusCode.'</h1>'); Framework::$response->write('<p>'.$statusMessage.'</p>'); Framework::$response->send(); });
Request
use LiteFramework\Request; $request = new Request(); $request->init(); if ($request->hasError() === true) { // error handling } echo $request->ip(); echo $request->url(); echo $request->ajax(); // more ...
Response
use LiteFramework\Response; $response = new Response(); $response->init(); $response->status(200); $response->write('Hello, World!'); $response->send(); // more ...
Router
use LiteFramework\Router; $router = new Router(); $rc = $router->match('/hello', '/hello'); var_dump($rc); // true $rc = $router->match('/users/@name', '/users/ali'); var_dump($rc); // true $rc = $router->match('/news/[0-9]+', '/news/1234'); var_dump($rc); // true $rc = $router->match('/news/[0-9]+', '/news/12a4'); var_dump($rc); // false $rc = $router->match('/blog(/@year(/@month(/@day)))', '/blog/2020/11'); var_dump($rc); // true $url = $router->make('/route/@id/user/@name', [1000, 'ali']); echo $url; // /route/1000/user/ali $url = $router->make('/path/*', [10, 20, 30]); echo $url; // /path/10/20/30
Dispatcher
use LiteFramework\Dispatcher; use LiteFramework\Router; use LiteFramework\Url; $url = new Url($_SERVER['DOCUMENT_ROOT'], dirname($_SERVER['SCRIPT_FILENAME'])); $url->setUrl('/1'); $router = new Router(); $dispatcher = new Dispatcher($router, $url->getPath()); $dispatcher->set('/1', 'MyClass::staticMethod'); $dispatcher->set('/2', ['MyClass', 'method']); $dispatcher->set('/3', function() { echo 'callback'; }); $dispatcher->run();
class MyClass { public static function staticMethod() { echo 'static'; } public function method() { echo 'non-static'; } }
Database
SQL table builder
use LiteFramework\SqlTableBuilder; use LiteFramework\Database; $table = [ 'test_table' => [ 'id' => [ 'type' => 'INT(10)', 'unsigned' => true, 'autoincrement' => true, 'primary_key' => true ], 'key' => ['type' => 'CHAR(100)', 'null' => true], 'value' => ['type' => 'VARCHAR(100)', 'null' => true], '_index' => [ 'index_name' => ['key' => 'asc'], ], ], ]; $builder = new SqlTableBuilder(); $builder->setSchema($table); $sqlCodes = $builder->build('sqlite'); // sqlite|mysql|mariadb $db = new Database(); $db->setConfig([ 'drive' => 'sqlite', 'database' =>'mydb.db', ]); foreach ($sqlCodes as $code) { $db->query($code); echo "$code\n"; }
Output (SQLite):
CREATE TABLE IF NOT EXISTS `test_table` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`key` TEXT,
`value` TEXT);
CREATE INDEX IF NOT EXISTS `test_table_index_name` ON `test_table` (`key` ASC);
Output (MySQL, MariaDB):
CREATE TABLE IF NOT EXISTS `test_table` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `key` CHAR(100), `value` VARCHAR(100), PRIMARY KEY (`id`), INDEX `test_table_index_name` (`key` ASC)) ENGINE = InnoDB;
Insert
$db->insert('test_table', [ 'key' => 'Hello', 'value' => 'World', ]); if ($db->error() !== null) { // error handling }
Select
$result = $db->select('test_table', '*', ['key' => 'Hello']); if ($db->error() !== null) { // error handling } print_r($result); // more ...
Output:
Array ( [0] => Array ( [id] => 1 [key] => Hello [value] => World ) )
Logger
use LiteFramework\Logger; $logger = new Logger('logs.log'); $logger->error('message', ['file' => __FILE__]); // more ...
Filesystem
use LiteFramework\Filesystem; $fs = new Filesystem(); if ($fs->isFile('test.txt') === false) { $contents = 'Hello'; $fs->write('test.txt', $contents, 0644); } if ($fs->isReadable('test.txt') === false) { $fs->chmod(0644); } $contents = null; $fs->read('test.txt', $contents); echo $contents; // more ...
Output:
Hello
Hash
use LiteFramework\Hash; $hash = new Hash(); $hash->setSalt('my-salt'); echo $hash->md5('input'); // c1957df5e4ec324fd3e0f44b0baaa430 echo $hash->sha2('input'); // 606ed6b1d650ad4ed4933f4ba9010eb384e1fe677480b20a3d428cee3c46422b // more ...
Encoding
use LiteFramework\Encoding; $encoding = new Encoding(); $rc = $encoding->isAscii('سلام دنیا'); var_dump($rc); // false $rc = $encoding->isAscii('Hello, World!'); var_dump($rc); // true $length = $encoding->strlen('سلام دنیا'); echo $length; // 17 // more ...
Random
use LiteFramework\Random; $random = new Random(); $bytes = $random->bytes(32, $toHex = true); echo $bytes; // 8aed6defbbb7349e4e074e68117fb0a614fe169897d13bcad57a8b11a8b3716e // more ...
Loader
use LiteFramework\Loader; $myVar = 'hello'; Loader::set('myVar', $myVar); $val = Loader::get('myVar'); echo $val; // hello $language = 'PHP'; Loader::setRef('language', $language); // Passing by Reference $language = 'C++'; $val =& Loader::getRef('language'); // Get Reference echo $val; // C++ // more ...