1. Go to this page and download the library: Download zeretei/php-core library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
$app->bind('mailer', new Mailer($config));
// Later, anywhere:
Application::get('mailer')->send($message);
// app/routes.php
use Zeretei\PHPCore\Http\Router;
use App\Controllers\UserController;
return function (Router $router): void {
// Optional base-path prefix for every route
$router->setHost('mysite');
// Closure route
$router->get('/ping', fn () => 'pong');
// Controller action [ClassName::class, 'method']
$router->get('/users', [UserController::class, 'index']);
$router->post('/users', [UserController::class, 'store']);
$router->put('/users/:int', [UserController::class, 'update']);
$router->patch('/users/:int', [UserController::class, 'patch']);
$router->delete('/users/:int', [UserController::class, 'destroy']);
};
// Route: /users/:int
public function update(int $id): void { ... }
use Zeretei\PHPCore\Application;
$request = Application::get('request');
// All sanitized input
$all = $request->all();
// Individual attribute (HTML-sanitized)
$name = $request->name;
// Raw query string
$page = Request::query('page');
public function store(): void
{
$data = $this->request->validate([
'name' => ');
// $data is only reached when all rules pass
(new User())->insert($data);
}
use Zeretei\PHPCore\Application;
$response = Application::get('response');
// Redirect
$response->redirect('/dashboard');
$response->redirect('/login', 301);
// Set status code only
Response::setStatusCode(404);
use Zeretei\PHPCore\Application;
$db = Application::get('database');
// INSERT / UPDATE / DELETE → returns bool
$db->query('INSERT INTO users (name, email) VALUES (?, ?)', ['Jane', '[email protected]']);
// Single row → returns array|false
$user = $db->fetch('SELECT * FROM users WHERE id = ?', [1]);
// All rows → returns array
$users = $db->fetchAll('SELECT * FROM users WHERE active = ?', [1]);
// Row count
$total = $db->count('SELECT * FROM users');
// Raw DDL
$db->execute('CREATE TABLE ...');
namespace App\Models;
use Zeretei\PHPCore\Blueprint\Model;
class User extends Model
{
// Defaults to lowercase class name + "s" → "users"
protected string $table = 'users';
protected array $fillable = ['name', 'email', 'password'];
}
namespace App\Controllers;
use Zeretei\PHPCore\Blueprint\Controller;
use App\Middleware\AuthMiddleware;
class UserController extends Controller
{
public function __construct()
{
// AuthMiddleware runs only before 'update', 'patch', and 'destroy'
$this->registerMiddleware(new AuthMiddleware(['update', 'patch', 'destroy']));
}
public function index(): void
{
// publicly accessible
}
public function update(int $id): void
{
// guarded by AuthMiddleware
}
public function destroy(int $id): void
{
// guarded by AuthMiddleware
}
}
namespace App\Middleware;
use Zeretei\PHPCore\Blueprint\Middleware;
use Zeretei\PHPCore\Application;
class AuthMiddleware extends Middleware
{
public function execute(string $action, mixed ...$params): void
{
if (Application::get('session')->get('user') === null) {
Application::get('response')->redirect('/login');
}
}
}
// Scoped to specific actions only
$this->registerMiddleware(new AuthMiddleware(['update', 'destroy']));
// Runs before every action in the controller
$this->registerMiddleware(new AuthMiddleware());
// app/Databases/migrations/0001_create_users_table.php
class CreateUsersTable
{
public function up(): string
{
return "CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
}
}
use Zeretei\PHPCore\Database\Migration;
(new Migration())->apply();