Skip to content
Technomantus Corvi edited this page Sep 5, 2026 · 1 revision

FAQ

How do I add authentication? It's already built in — see Authentication (tanuki_login). Inert by default; uncomment its routes in routes.php to activate it.

Is there an admin panel? Yes — see Admin Panel (tanuki_admin). Depends on tanuki_login, register models in one file, no per-resource code needed.

Can I use a different database engine (PostgreSQL, SQLite)? Yes — set DB_DRIVER in .env to mysql, pgsql, or sqlite. For SQLite, also set DB_PATH. See Models.

Can I use the framework without a database? Yes. The connection is lazy — if no route ever calls a model, no connection is ever opened.

Where do assets (CSS, JS) go? public/assets/. Served directly by the web server since they live inside the document root. Reference them with url('/assets/css/app.css').

Will there be a language/i18n system? It's already built in — t() + JSON dictionaries, plus a working URL-prefix language switcher (/en/..., /es/...). See Internationalization.

Why don't Redis/Mongo/Database share one interface? On purpose — a unified query API across relational and document stores is essentially a lightweight ORM/ODM, which this framework deliberately avoids. Each class is a thin, honest wrapper over its native driver. See Optional Connections.

Why isn't CSRF protection enforced automatically on every route? Enforcing it globally would require every form in every project — including webhooks and API-style endpoints without sessions — to carry a token whether they need it or not. It's opt-in per form instead; see Security.

How do I remove the TODO example CRUD? Delete models/TodoModel.php, controllers/TodoController.php, views/todo/, and its entries in routes.php and config/nav.php. It has no dependents elsewhere.

How do I remove tanuki_login or tanuki_admin? See the "Removing the extension" section at the end of Authentication and Admin Panel respectively — both are isolated by design.

My route returns a 404 even though it's in routes.php — what's wrong? The most common cause: an extra space in the route key ('GET /path' instead of 'GET /path'). Route keys are compared as exact strings. See Routing.

I get a PDOException about connecting to db / getaddrinfo failed. DB_HOST is set to a Docker service name (db) but you're running locally without Docker (or vice versa) — check Docker for the .env difference between the two environments.

Clone this wiki locally