AI blog · DotApp PHP Framework 2.0
How-to articles for people and coding agents
Complete walkthroughs with copy-paste code: modules, config.php, cache, DSM, secure forms, Bridge, and .js. Each article is its own URL so agents can retrieve one topic at a time.
App and modules
How to create a module in DotApp PHP Framework
Scaffold a module with DotApper, register routes in initialize(), and ship Config::module fallbacks so the module stays portable.
Read articleHow app/config.php works in DotApp PHP Framework
One file configures the app and every module: databases, drivers, secrets, and Config::module overrides without editing module folders.
Read articleHow module initialization works in DotApp PHP Framework
Boot order from index.php through listeners, initializeCondition, initialize(), and lazy loading with initializeRoutes().
Read article
Cache and session
How to use cache in DotApp PHP Framework
Cache::use, save and load, File Redis Memcached and Null drivers, context keys, TTL, and the return value of a miss.
Read articleHow to use sessions in DotApp PHP Framework (DSM)
Application state belongs in DSM::use(Module), never in $_SESSION. Drivers, reserved keys, and config.php registration.
Read article
Secure browser channel
How DotApp PHP Framework protects the browser-to-PHP channel
Per-session key, app.c_enc_key, extra keys, key update, formName, crcCheck, encrypted ids — why a lone CSRF token is a narrow guarantee.
Read articleHow to create secure forms in DotApp PHP Framework
fo-rm, formName between the tags, crcCheck, data() vs data(true), and $request->form() with a complete copy-paste module example.
Read articleSecure backend-frontend communication in DotApp PHP Framework
When to use fo-rm, $dotapp().load(), Bridge, or uploadFile. PHP still checks rights after a successful crcCheck.
Read article
Data and HTTP
How to use the database in DotApp PHP Framework
DB::module RAW with named bindings (:iduser). Every ? in raw() is a placeholder including COMMENT. QueryBuilder, paginate, transactions.
Read articleHow routing works in DotApp PHP Framework
Router::get and post, STATIC_ROUTE, path constraints, callable strings, before hooks, JSON endpoints, and named RAW lookups.
Read articleRequest lifecycle in DotApp PHP Framework
data() is the protected copy; data(true) is original. query vs matchData, crcCheck, form(), ajaxReply HTTP 400 vs .after().
Read articleHow to render views and layouts in DotApp PHP Framework
Renderer::new, view and layout files, {{ var: }} directives, silent empty output, assets, and translations.
Read articleHow translations and i18n work in DotApp PHP Framework
Translator::loadLocaleFile, {{_ }} helper, lowercase keys, silent missing files, no pluralization, product copy in JSON.
Read articleHow authentication and 2FA work in DotApp PHP Framework
Auth::login return shapes, stages, Auth::can, TOTP, data(true) for passwords, and $dotapp().twoFactor. Auth::logged() does not exist.
Read articleHow to create database migrations with Installation.php in DotApp PHP Framework
Versioned Installation.php, alreadyDone and markDone. No ? in SQL comments inside raw() — every ? is a placeholder. DB::migrate() is not implemented.
Read article
HTTP and app lifecycle
Controllers and Response in DotApp PHP Framework
Static controller methods, return HTML or Response::json / redirect / ajaxReply. Trailing ! skips DI. Missing views return empty string.
Read articleHow to build JSON endpoints with Router in DotApp PHP Framework
One Router::get or post per verb. Return Response::json. Do not use apiPoint. Channel posts still need crcCheck and ajaxReply.
Read articleMiddleware in DotApp PHP Framework
Route before hooks vs named Middleware::register pipelines vs #Shop:AuthGate@check!. Do not mix callback shapes.
Read articleDependency injection in DotApp PHP Framework
bind, singleton, resolve (throws if unbound). Type-hints only without trailing !. Do not use Injector::.
Read articleEvents and listeners in DotApp PHP Framework
module.listeners.php first. trigger() returns the original payload. Listener returns are ignored. Names are lowercased.
Read articleError handling and return values in DotApp PHP Framework
Four failure styles: execute callbacks, null/false, envelopes, exceptions. Validator arrays are truthy. Missing views are empty string.
Read article
JavaScript and Bridge
How to build AJAX lists with pagination in DotApp PHP Framework
paginate() plus $dotapp().load(), overlay, live DOM patch, encrypted ids. QueryBuilder or named RAW bindings. No full-page ?page= reloads.
Read articleHow to call PHP from JavaScript with DotBridge
Bridge::listen, $dotApp->bridge->fn, template on(click), filters, and rate limits on the same secure channel.
Read articleCallable strings in DotApp PHP Framework
Module:Class@method!, # middleware, * models, when to skip DI, and DotApp::call().
Read articleHow to use $dotapp() JavaScript in DotApp PHP Framework
Mandatory /assets/dotapp/dotapp.js, boot events, selectors, live(), parseReply(), and preloaders.
Read articleReactivity in DotApp PHP Framework
dotapp.reactive.js: variable, databind, computed, reactive-api attributes, and the PHP Reactive helper.
Read article