PHP code example of zeretei / php-core

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/ */

    

zeretei / php-core example snippets




declare(strict_types=1);

SSION_NONE) {
    session_start();
}

use Zeretei\PHPCore\Application;
use Zeretei\PHPCore\Http\Request;

$config = );
$app->bind('path.routes',    $app->ROOT_DIR . '/app/routes.php');
$app->bind('path.databases', $app->ROOT_DIR . '/app/Databases');

$app->run(Request::uri(), Request::method());



return [
    'root_dir' => dirname(__DIR__),

    'database' => [
        // Option A — explicit DSN (recommended)
        'dsn'      => 'mysql:host=127.0.0.1;dbname=myapp;charset=utf8mb4',
        'username' => 'root',
        'password' => '',

        // Option B — constructed DSN (legacy)
        // 'connection' => 'mysql:host=127.0.0.1',
        // 'name'       => 'myapp',
        // 'username'   => 'root',
        // 'password'   => '',
    ],
];

use Zeretei\PHPCore\Application;

$config   = Application::get('config');    // array
$router   = Application::get('router');    // Router
$request  = Application::get('request');   // Request
$response = Application::get('response');  // Response
$database = Application::get('database');  // QueryBuilder
$session  = Application::get('session');   // Session
$log      = Application::get('log');       // Log

$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'];
}

$users = new User();

// Create
$users->insert(['name' => 'Jane', 'email' => '[email protected]', 'password' => $hash]);

// Read
$user    = $users->select(1);        // by primary key → array|false
$all     = $users->all();            // all rows

// Update
$users->update(1, ['name' => 'Jane Doe']);

// Delete
$users->delete(1);

// Custom key column
$users->select('[email protected]', key: 'email');
$users->delete('[email protected]', key: 'email');



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());

$session = Application::get('session');

// Persistent session values
$session->set('user', $userId);
$user = $session->get('user');

// Flash notifications (survive exactly one redirect)
$session->setFlash('success', 'Profile updated.');
$message = $session->getFlash('success');
$all     = $session->flashBag();   // ['success' => 'Profile updated.']

// Validation error bag (populated automatically by validate())
$session->setErrorFlash('email', 'Invalid email address.');
$error  = $session->getErrorFlash('email');
$errors = $session->errorBag();    // ['email' => 'Invalid email address.']



// 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();
bash
composer dump-autoload

project/
├── app/
│   ├── Controllers/
│   ├── Middleware/
│   ├── Models/
│   ├── Databases/
│   │   └── migrations/
│   ├── Views/
│   └── routes.php
├── public/
│   └── index.php          # Entry point
├── config.php
└── composer.json

{numeric_prefix}_{PascalCase_class_name_parts}.php