Skip to content

Releases: vortexphp/framework

v0.2.0: Release 0.2.0

03 Apr 17:06

Choose a tag to compare

Added

  • php vortex doctor — when config/files.php exists, checks each upload profile’s directory: exists under public/, writable, create/delete probe. FilesConfigUploadRoots parses the config shape.
  • Log::setBasePath() at bootstrap; Log::info, warning, error, debug, notice, critical, alert, emergency, log($level, …) with optional JSON $context; same storage/logs/app.log as exceptions.
  • Cookie value object (Set-Cookie via Response::cookie() or Cookie::queue() + Cookie::flushQueued() in Kernel / Application::run()), Request::cookie() / cookies(), Cookie::parseRequestHeader() (quoted values, SameSite helper shared with Session).
  • Files\Storage façade: disk($name) returns Filesystem drivers from config/storage.php (local, local_public, null); default disk for put/get/…; storeUpload / publicRoot use upload_disk / public_disk. Storage::setBasePath($basePath) at bootstrap (Application::boot and app bootstrap).
  • Support\Benchmark static stopwatch helper with named timers: start, has, elapsedNs, elapsedMs, elapsedSeconds, measure, forget.

Changed

  • Breaking: Database is multi-connection: config/database.php uses default and connections.{name}.driver (sqlite, mysql, pgsql). Vortex\Database\DatabaseManager is registered in the container; Connection is constructed with a PDO from the manager; DB::connection(?string) selects a connection. Env: DB_CONNECTION (default connection name, default default).
  • Breaking: Cache is multi-store: config/cache.php uses default and stores.{name}.driver (like storage disks). Vortex\Cache\CacheManager is registered in the container; Cache::store(?string) selects a store; CacheFactory::make() returns the default store via the manager. Env: CACHE_STORE (default store name), CACHE_DRIVER only used when CACHE_STORE is unset.
  • Breaking: Session is multi-store: config/session.php uses default and stores.{name}.driver (native, null). Vortex\Http\SessionManager is registered in the container; Session facade uses the default store; Session::store(?string) selects a store; Csrf now reads/writes through the Session facade. Env: SESSION_STORE controls default store name.
  • Breaking: QueryBuilder::paginate() returns Vortex\Pagination\Paginator instead of an array. Use $paginator->items and the same public count fields (total, page, per_page, last_page). For page links, call withBasePath() (e.g. with route('name')) then urlForPage($n); helpers hasPages(), onFirstPage(), and onLastPage() are available for templates.
  • Breaking: Log::exception(Throwable $e) only — project root comes from Log::setBasePath() (Application::boot() and app bootstrap call it). ErrorRenderer has no constructor parameters.

v0.1.0: Release 0.1.0

03 Apr 15:56

Choose a tag to compare

Breaking

  • HTTP route files (app/Routes/*.php except *Console.php) are required and must register routes at the top level with Route::get / post / add — no return static function (): void { … } wrapper. Console route files still return callable(ConsoleApplication): void.

Added

  • Routing: named routes (Router::name, Router::path, Route::name()), global route() helper and Twig route(), Router::interpolatePattern().
  • HTTP testing: Kernel::handle(Request), Request::make(), Request::normalizePath(), Response::headers().
  • Rate limiting: RateLimiter, Middleware\Throttle (cache-backed fixed window), config/throttle.php pattern in apps.
  • php vortex doctor: requires ext-mbstring; doctor --production requires non-empty APP_KEY.

Changed

  • Kernel::send() applies TrustProxies, captures the request, then delegates to handle() before send() on the response.

v0.0.1

03 Apr 15:06

Choose a tag to compare

Create README.md