milesq/nyxt

简单、现代的 PHP 框架

v1.1 2021-01-27 09:59 UTC

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");
});