milesq / nyxt
简单、现代的 PHP 框架
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: 2024-09-11 21:52:05 UTC
README
安装
您可以使用 composer 使用此框架
composer require milesq/nyxt
开箱即用
此包中包含哪些内容?
- 基于文件系统的路由(自定义 404,公共目录)
- Twig 模板引擎
- 基于 rakit/validation 的表单验证
- 简单的 ORM 以帮助您管理数据库(基于 clancats/hydrahon)
使用方法
查看我们的 examples/
目录
开始之前
Nyxt 有一个小的样板。您必须将所有请求(除了以 /public
开头的请求)重定向到 index.php
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]
现在您可以从 index.php
简单地运行框架
<?php require_once './vendor/autoload.php'; $framework = new \Nyxt\Base; $framework->run();
然后创建一个名为 controllers
的文件夹。这个目录是您路由的位置。在控制器文件中,您必须声明一个名为 Handler
的类,该类继承自 \Nyxt\Controller
。此类应该有一个名为 handle
的公共函数,当有人向您的端点发送请求时,该函数将被调用。
处理器示例
<?php class Handler extends \Nyxt\Controller { public function handle() { // There you can handle request echo 'URL is: /'; } }
路由
路由基于文件系统,并受 Nuxt 启发
您需要了解一些规则才能创建路由
-
index.php
将控制/
路径 -
something.php
可以通过/something
实现 -
位于
user
目录中的create.php
可以通过/user/create
实现 -
您可以通过在 slug 名称前加上
_
来添加路径参数(slug)。例如,
controllers/user/_id.php
可以通过/user/what-ever
实现。您可以通过处理器对象访问 slug 参数,如下所示:$this->id
对于以下文件结构,以下路径将可用
| .htaccess
| index.php
|
\---controllers
| index.php /
|
\---user
\---_id
create.php /user/what-ever/create
_action.php /user/what-ever/name-of-action
查看 examples/routing
获取更多提示
模板
在 templates/
目录中,您可以放置 twig 模板,然后您可以在控制器中使用 $this->render($name, $parametersAsAssocTable)
渲染它们。
重要 请记住,在部署服务器上部署时,将环境变量 NYXT_MODE
设置为生产。在开发模式下,不使用缓存。
您可以通过几种方式设置模板参数,例如。
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]); } }
验证
每个处理器都可以声明 validate
方法。该方法将使用 $v
参数调用,该参数是 \Rakit\Validation\Validator
的实例。请查看 https://github.com/rakit/validation
validate
方法必须通过返回布尔值或字符串来告诉 Nyxt 验证是否通过。
错误 404 - 未找到
您可以通过添加 [error].html
模板或在公共目录中添加 404.html
来应用自己的 404 页面。
使用数据库
ORM 基于 clancats/hydrahon,因此请查看 文档 和 examples/orm
要创建一个模型,您需要创建一个与数据库表的单数形式相同的文件。
示例模型
<?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); } }
我们如何使用此模型?
当 Handler
类使用 #[nyxt('orm')]
装饰时,每个模型都将注入到处理器中
#[nyxt('orm')] class Handler extends \Nyxt\Controller { function handle() { $this->bikes->docked()->where('id', '>', 3)->get(); } }
要了解如何构建查询的详细信息,请查看 hydrahon 文档
重要
现在您可能想知道 "Nyxt 如何连接到数据库?"
答案:如果您的应用程序正在使用数据库,您必须稍微修改 index.php 并将数据库连接器作为 \Nyxt\Base 构造函数的第一个参数提供
例如:
$framework = new \Nyxt\Base(function() { return new PDO("mysql:host=localhost;dbname=test", "username", "pass"); });