milesq / nyxt
Simple, modern php framework
Installs: 12
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 0
Forks: 0
Open Issues: 1
pkg:composer/milesq/nyxt
Requires
- bramus/router: ^1.5
- clancats/hydrahon: ^1.1
- icanboogie/inflector: ^2.0
- rakit/validation: ^1.4
- twig/twig: ^3.2
This package is auto-updated.
Last update: 2025-10-12 00:15:21 UTC
README
Installation
You use this framework by composer
composer require milesq/nyxt
Out of the box
What is included in this package?
- Routing based on file system (custom 404, public directory)
- Twig template engine
- Form validation based on rakit/validation
- Simple a'la ORM to help you manage your database (based on clancats/hydrahon)
Using
Check our examples/ directory
Before start
Nyxt have a small boilerplate. You must redirect all requests (except request which starts from /public) to index.php
Example configuration for Apache
RewriteEngine On RewriteRule ^(app|dict|ns|tmp)\/|\.ini$ - [R=404] RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(?!public/)(.+)$ index.php [L,QSA] RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
Now you can simply run framework from index.php
<?php require_once './vendor/autoload.php'; $framework = new \Nyxt\Base; $framework->run();
Then create a folder named controllers.
This directory is the place for your routes.
Inside controller files you must declare class
called Handler which extends from \Nyxt\Controller.
This class should have public handle function which will
be invoked when someone sends a request to your endpoint.
Example of handler
<?php class Handler extends \Nyxt\Controller { public function handle() { // There you can handle request echo 'URL is: /'; } }
Routing
Routing is based on file system and inspired by Nuxt
There is a few rules you need to know to create routes
-
index.phpwill take control over/path -
something.phpcan be achieved by/something -
create.phpinsideusercan be achieved by/user/create -
you can add path parameters (slug) by prepend name of slug with
_.For example
controllers/user/_id.phpcan be achieved by/user/what-everYou have access to slug parameters by handler object like that:$this->id
For the following file structure, the following paths will be available:
| .htaccess
| index.php
|
\---controllers
| index.php /
|
\---user
\---_id
create.php /user/what-ever/create
_action.php /user/what-ever/name-of-action
Check examples/routing for more tips
Templates
Inside templates/directory you can place
twig templates, nextly you can render
them inside controller by $this->render($name, $parametersAsAssocTable)
Important Remember to set environment
variable NYXT_MODE to production on deploy server.
In development mode, cache is not used.
You can set template params through for a few ways E.g.
class Handler extends \Nyxt\Controller { public function handle() { // You can declare template arguments like: $this->by_property = "hello"; $this->reset(); $this ->setByMethod("hello") ->setChainMethod("world") ->unset('chainMethod'); $this->render('index', ['by_arg' => 1]); } }
Validation
Every handler can declare validate method.
The method will be invoked with $v
parameter which is an instance of \Rakit\Validation\Validator.
Check out https://github.com/rakit/validation
The validate method must tell Next if the validation passed
via return boolean or string.
Error 404 - not found
You can apply your own 404 page by add [error].html
template or 404.html in public directory
Using DB
ORM is based on clancats/hydrahon,
so check out docs
and examples/orm
To create a model, you need to create a file named which is a singular form of the db table.
Example model:
<?php class Bike extends \Nyxt\Model { var array $__columns = ['position', 'docked']; # these columns will be used in select and create methods public function docked() { return $this->findByDocked(true); } }
How can we use this model?
When Handler class is decorated with #[nyxt('orm')]
every model will be injected to handler
#[nyxt('orm')] class Handler extends \Nyxt\Controller { function handle() { $this->bikes->docked()->where('id', '>', 3)->get(); } }
To learn how exactly can u build queries take a look for hydrahon docs
Important
Now you may be asking "how does Nyxt connect to the database?"
Answer: If your app is using db, you must change index.php a little and provide db connector as the first argument of constructor of \Nyxt\Base
E.g.
$framework = new \Nyxt\Base(function() { return new PDO("mysql:host=localhost;dbname=test", "username", "pass"); });