nervsys / ns
一个非常轻量级的PHP框架,非常易于使用和集成。
Requires
- php: ^8.1
- ext-curl: *
- ext-fileinfo: *
- ext-gd: *
- ext-gettext: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- ext-openssl: *
- ext-pdo: *
- ext-redis: *
- ext-simplexml: *
This package is auto-updated.
Last update: 2024-09-30 09:47:50 UTC
README
关于Nervsys
-
什么是"Nervsys"?
一个非常轻量级的PHP框架,非常易于使用和集成。 -
为什么叫"Nervsys"?
一开始,正如我们希望的。单元可以更像是神经细胞进行处理,并作为一个基于纯数据调用的系统一起构建。不需要精确的命令告诉系统做什么。 -
有没有简写名?
NS,这是我们大多数人叫它的,但是,不要和任天堂Switch混淆。 -
需求
PHP 8.1+ 和更高版本。任何类型的Web服务器或CLI模式运行。 -
使用示例
- 普通Web后端开发框架
- 适用于所有类型应用API控制器
- 程序通信客户端
- 更多...
安装
- 将源代码克隆或下载到机器上的任何位置。即使存在多个项目,同一台机器上也只需要一个副本。
- 在项目的入口脚本中包含 "NS.php",并使用 "NS::new();" 调用它。
- 如果需要,使用 "trait System" 在调用 "NS::new();" 之前注册您自己的模块和函数。
- 在 "/api" 下编写API代码类,在 "/app" 下编写应用程序代码类,如果未更改,那么就这样。
- 在 "/Ext" 中有适用于普通项目开发的常用扩展,所以在编码时请务必审查它们。它们可能会有所帮助。
使用
所有示例使用都是在默认系统设置下。
1. 建议的项目结构
注意:应用根路径将设置为入口PHP脚本的父目录。
Root/
├─api/ default api entry code path
│ ├─DemoApiClass.php demo api php class file
│ └─... other opened api php class file
├─app/ default application code path
│ ├─DemoAppClass.php demo application php class file
│ └─... other application php class file
└─www/ default home path
├─index.php main entry script
└─... other entry script file, such as "api.php"
2. NS集成
按照 "安装" 步骤将NS集成到您的入口脚本中。示例代码如下。
require __DIR__ . '/../../Nervsys/NS.php'; $ns = new Nervsys\NS(); $ns->setApiDir('myApiPath') ->setDebugMode(true) ->setContentType('application/json') ->addPreHooks('/', [\app\hook\ApiCheck::new(), 'userToken']) ->addAutoloadPath($ns->app->root_path . DIRECTORY_SEPARATOR . 'library'); $ns->go();
3. 请求数据格式
NS可以通过GET或POST通过FormData和请求Payload解析数据。
当数据作为请求Payload发送时,支持JSON和XML。
NS中的数据获取器和解析库在 "/Core/Lib/IOUnit.php"。
在HTTP请求中,NS按照以下步骤获取和解析数据
1. read Accept from HTTP request header, decide return type if not defined in entry.
2. read URl, try to fetch "c" from "PATH_INFO" or "REQUEST_URI" if found.
3. fetch HTTP FormData in non-overwrite mode in following order: FILES -> POST -> GET.
4. fetch request Payload, and try to decode in JSON/XML format, add to data from above.
5. read HTTP Header and Cookie data by specific keys defined in entry script, add to data from above.
6. find and isolate "c" data from data source, and pass it to Router library as request command.
在CLI模式下,NS从 "-c" 参数的 "c" 或未找到时第一个参数中获取 "c"。字符串参数 "-d" 将被解码以获取CGI数据源。"-r" 强制输出返回数据格式。其他参数将作为CLI argv考虑。
4. 关于键 "c"
请求数据中的 "c" 被视为请求命令,并将系统引导继续。
"c"可以通过任何方式传递,URL、GET、POST,都可以,无论是FormData还是请求Payload。
在CGI模式下,通常称为HTTP请求,由于一些安全原因,“c”总是重定向到API路径,但CLI模式允许通过在 "c" 的开头添加 "/" 使用完整的类命名空间路径从根目录调用。
有效的 "c" 格式应如下所示
API path based: innerpath_in_api_path/class_name/public_method_name
examples:
URL: http://your_domain/index.php/user/login => calling "login" method in "\api\user" class.
URL: http://your_domain/index.php/user/info/byId => calling "byId" method in "\api\user\info" class.
GET: http://your_domain/index.php?c=user/login
POST: pass directly "user/login" in "c" parameter, both support FormData or request Payload.
ROOT path based: /namespace/class_name/public_method_name
examples:
URL: NOT support.
CLI: php index.php /app/user/login => calling "login" method in "\app\user" class.
CLI: php index.php -c"/app/user/login" => calling "login" method in "\app\user" class.
GET: http://your_domain/index.php?c=/app/user/login
POST: pass directly "/app/user/login" in "c" parameter, both support FormData or request Payload.
5. 数据自动填充
一旦 "c" 和数据源被系统获取,路由库和执行库将被唤醒以运行确切的方法。匹配键的参数将从数据源中取出,并在调用时按正确的顺序自动传递到目标方法中。注意传递给NS的所有数据,键区分大小写,数据值类型严格。所有返回的结果都将被捕获并输出。
示例
parameters in any order:
URL: http://your_domain/index.php/user/login?name=admin&passwd=admin&age=30&type=client
URL: http://your_domain/index.php/user/login?passwd=admin&age=30&name=admin&type=client
- API 1
namespace api; class user { public function login($name, $passwd) { //your code return $name . ' is online!'; } }
- API 2
namespace api; class user { public function login($name, $passwd, int $age) { //your code return $name . ' is ' . $age . ' years old.'; } }
6. 暴露的核心库
从8.0版本开始,NS向开发者暴露了一些重要的核心库。
感谢 douglas99,所有可变的核心相关API已合并到 "Ext/libCoreApi.php"。
有了这个,开发者可以注册自己的库而不是默认库,例如自定义路由器、输出处理程序、ApiPath、相关钩子函数等...
待办事项
- 基本核心和扩展逻辑
- 自动参数映射
- 应用代码环境检测逻辑
- 自定义路由器模块支持
- 自定义错误处理模块支持
- 自定义数据读取/输出模块支持
- 基于路径的钩子注册函数支持
- 将主系统控制函数放入特质中以方便使用
- 进程控制器管理支持
- 简单的Fiber管理支持
- 与套接字相关的功能
- 一些有用的算法
- 基于ML/AI的内部路由
- 更详细的文档和示例
除了上述功能外,NS还有很长的路要走。
如果你发现错误或使其更好,或者只是需要帮助,请联系我们。感谢提出问题和拉取请求。
支持者
感谢 JetBrains 在开源支持计划中对项目的支持。
许可证
本软件根据Apache 2.0许可证的条款授权。
您可以在LICENSE.md文件中找到许可证副本。