Luminova Framework

Full Changelog Starting from Version 3.5.6 and Above

NameDescription
Version Code3.6.2
Version NameXtra
Published2024-06-09 23:06:39
Updated2025-06-09 23:06:39

Luminova 3.5.6+ Update Overview

Version 3.5.6 introduces significant performance improvements and new features. This update enhances attribute parsing through tokenization when PHP attribute routing is enabled, and introduces an API for implementing CLI console controllers using the novakit command-line interface.


New Features

Introduced in Version 3.6.2

Database Builder Class

  • escape() MethodAdded support for safely escaping values for SQL queries.Handles strings, numbers, nulls, booleans, arrays (JSON), and raw expressions.

Template View Class

  • setAssetDepth() MethodAllows manual control of how many ../ prefixes are added to asset or URI paths.Overrides the default auto-detection based on URI segments.

Introduced in Version 3.6.1

Database Connection Class

Introduced connection sharding support, enabling database operations to route through specific servers based on user ID, region, or custom logic.

  • Connection::shard(string $key, bool $fallback = false, ...): Manually connect to a specific shard server using a unique key.

Database Configuration Class

Added sharding-related configuration options:

  • static bool $connectionSharding – Globally enable or disable automatic sharding.
  • static bool $shardFallbackOnError – Whether to fallback to backup servers if the selected shard is unreachable.
  • static getShardServerKey(): string – Returns the shard key used to determine the target database server.

cURL HTTP Client

Added support for parallel requests using PHP’s CurlMultiHandle, allowing you to queue and execute multiple HTTP requests concurrently.

  • Uses PHP native curl_multi_* functions.
  • Ideal for executing multiple requests in one network cycle.
  • Non-blocking and efficient for APIs and bulk operations.
use Luminova\Http\Client\Curl;
use Luminova\Http\Method;

$multi = Curl::multi();

$multi->add(Method::GET, 'https://example.com')
    ->add(Method::POST, 'https://example.org')
    ->run();

print_r($multi->getResponses());

Introduced in Version 3.5.6

Command Group Attribute

Added support for the Group attribute, which allows CLI controllers to define a command group at the class level.

Incoming HTTP Request

New methods added to improve request handling:

  • getMethodOverride() – Returns the HTTP method override value, if any.
  • getAnyMethod() – Returns the overridden method if available and the request method is POST, otherwise returns the original request method.

Routing System Interface

The routing system now implements Luminova\Interface\RouterInterface, allowing full replacement with a custom routing implementation.

Application Base Class

New method getRouterInstance() added to retrieve router instance for application routing, making it easier to replace the routing system.

Crypter Utility Class

New methods added for validating cryptographic key types and pairs:

  • isPrivateKey() – Validates whether a given string is a private key.
  • isPublicKey() – Validates whether a given string is a public key.
  • isKeyMatch() – Verifies if a private and public key pair matches.

HTTP Request Methods

A new class Luminova\Http\Method has been added to provide convenient access to HTTP method constants, such as Method::GET, Method::POST, and others.

CLI Controllers Command Limitation

Added support for $users property in CLI controllers extending Luminova\Base\BaseCommand or Luminova\Base\BaseConsole. This property allow restricting command execution to specific system users.

Command Utility Class (Terminal)

The Terminal class now includes new methods for retrieving system details and supporting CLI-based authentication:

  • systemInfo() – Returns structured system and terminal information.
  • getSystemId() – Generates a consistent, unique system identifier suitable for CLI authentication.
  • getTerminalName() – Retrieves the name of the current terminal in use.
  • getSystemModel() – Returns the device or system model (e.g., MacBook Pro, Dell XPS).
  • getPid() – Returns the parent process ID (PPID) for the current CLI session.
  • about() – Displays a formatted table of system and environment information. Also via command php novakit --system-info.
  • whoami() – Returns the current system user executing the CLI script.

Optimizations

Improved in Version 3.6.2

Database Builder Class

Refined return types for better consistency and reliability:

  • average() now returns int|float and defaults to 0 on failure (previously false).
  • sum() now returns int|float and defaults to 0 on failure (previously false).
  • total() now returns int and defaults to 0 on failure (previously false).

Improved in Version 3.6.1

NovaLogger Class

The Luminova logging system has been enhanced to optionally include log context when sending messages to Telegram.You can enable this feature by:

  • Setting the environment variable:logger.telegram.send.context=true

  • Or toggling the static property in your configuration class:App\Config\Logger::$telegramSendContext = true;

Use Case:Helps provide detailed debugging information in Telegram alerts without cluttering logs by default.


Improved in Version 3.5.6

File Uploader Class

Improved file upload handling and error validation:

  • Automatic method switching: When using the upload() or chunk() methods, files smaller than 5MB with a valid temporary path will automatically use move() for better performance.
  • Directory validation: An exception is thrown if the upload path is not a valid directory.
  • Write permission check: Uploads fail with a descriptive error if the upload path is not writable.

Attribute Parser

Replaced reflection-based parsing with PHPToken to enhance performance and reduce overhead.

Route Attributes

Improved error handling by throwing exceptions when invalid middleware is specified.

Routing System

Refined routing behavior to support HTTP method overriding and improve overall routing speed.

Boot Autoload

Updated HTTP method spoofing to rely on X-HTTP-Method-Override and restrict it to POST requests, aligning with RFC 7231.

Response Renderer

Enhanced response rendering for better accuracy and output consistency.

Uploaded File Configuration

Replaced the use of stdClass with a dedicated Luminova\Http\FileConfig configuration object for better structure and clarity.


Corrections

Improved in Version 3.6.2

Documentation

  • Fixed several typos in inline comments and annotations (weatherwhether).

Improved in Version 3.6.1

Luminova Console Command

All NovaKit commands extending BaseConsole have been updated and should be updated for consistency.The command identifier has been moved from the $name property to the protected $group property to align with the BaseCommand structure.

Why this matters:Ensures consistent behavior and cleaner command registration across all CLI components.


Renamed Components

Changes in Naming Since Version 3.6.1

Database Configuration Properties

The following properties have been renamed for clarity and consistency:

  • Environment File: database.pdo.enginedatabase.pdo.version
  • Configuration Array Key: pdo_enginepdo_version
  • Connection Servers and Backup: static array $databaseBackupsstatic array $databaseServers

These changes help better reflect their purpose—defining the PDO driver version (e.g., mysql, pgsql, etc.).


Changes in Naming Since Version 3.5.6

  • Luminova\Application\FoundationLuminova\Luminova
  • Luminova\Command\ConsoleLuminova\Command\Novakit
  • Luminova\Command\NovaKit\*Luminova\Command\Consoles\*
  • App\Controllers\Errors\ViewErrorApp\Errors\Controllers\ErrorController
  • /resources/Views/system_errors/*/app/Errors/Defaults/*

Deprecated

Marked as Deprecated in Version 3.5.6

Command Handler (Terminal)

  • explain() – Deprecated. Use parse() instead.

Removed

Legacy Methods Removed in Version 3.5.6

The following deprecated methods have been removed:

  • Luminova\Http\File::getMimeFromTemp() – Use getMimeFromFile() instead.
  • Luminova\Routing\Router::before() – Use guard() instead.
  • Luminova\Security\Crypter::verify() – Use isPassword() instead.
  • Luminova\Sessions\Session::toExport() – Use getResult() instead.
  • Luminova\Sessions\Session::ssid() – Use getToken() instead.
  • Luminova\Sessions\Session::ssDate() – Use getDatetime() instead.
  • Luminova\Command\Terminal::color() – Use Luminova\Command\Utils\Color::apply(...) or Color::style(...) instead.

ToDo

Included in Version 3.6.1

Update Your Database Configuration

To enable sharding support, update your Database Configuration Class with the following properties and method:

// /app/Config/Database.php

namespace App\Config;

use Luminova\Core\CoreDatabase;

class Database extends CoreDatabase
{
  /**
   * Enable or disable global connection sharding.
   * This setting does not affect direct use of the `shard()` method.
   */
  public static bool $connectionSharding = false;

  /**
   * If enabled, fallback to a backup server when the selected shard fails.
   * This setting does not affect direct use of the `shard()` method.
   */
  public static bool $shardFallbackOnError = false;

  /**
   * Optional list of sharded or backup database servers.
   */
  protected static array $databaseServers = [
    'NG' => [
        //...
        'pdo_version'  => 'mysql', // renamed from pdo_engine
    ],
  ];

  /**
   * Return a shard key used to select a target database server.
   * Typically based on geo-location, user ID, or any custom logic.
   */
  public static function getShardServerKey(): string 
  {
    return ''; // Return a key like 'NG', 'US', etc.
  }
}

Note:Rename pdo_engine to pdo_version in all defined connections.Also rename the property name $databaseBackups to $databaseServers.

Application Logging Configuration

Add a new static boolean property $telegramSendContext to the application logger configuration. This controls whether log context data is sent to Telegram when Telegram logging is enabled.

// /app/Config/Logger.php

namespace App\Config;

class Logger extends BaseConfig
{
  /**
   * Whether to include log context when sending messages to Telegram.
   */
  public static bool $telegramSendContext = false;
}

Purpose:Allows fine-tuned control over the verbosity of logs sent to Telegram.