4apps / staticphp
轻量级的PHP框架
Requires
- php: >=7.1
- twig/twig: ~2.0
Requires (Dev)
- apigen/apigen: master-dev
- phpunit/phpunit: ^8.0
- roave/better-reflection: dev-master
- dev-master
- v1.1.0
- v1.0.0
- v0.9.5
- v0.9.4
- v0.9.3
- v0.9.2
- v0.9.1
- v0.9.0
- dev-develop
- dev-dependabot/npm_and_yarn/webpack-5.76.0
- dev-dependabot/npm_and_yarn/minimist-1.2.8
- dev-dependabot/npm_and_yarn/cacheable-request-and-nodemon--removed
- dev-dependabot/npm_and_yarn/http-cache-semantics-4.1.1
- dev-dependabot/npm_and_yarn/json5-1.0.2
- dev-dependabot/npm_and_yarn/loader-utils-1.4.2
- dev-dependabot/composer/twig/twig-3.4.3
- dev-dependabot/npm_and_yarn/terser-5.14.2
- dev-example
This package is auto-updated.
Last update: 2024-09-25 13:00:15 UTC
README
StaticPHP
简单、模块化的PHP框架。 README.md需要更新。
要求
- PHP 8.1+
- Twig 3.0+
安装
有两种方法开始使用StaticPHP框架
- Docker <- 建议使用
- Composer
1. 使用Docker
docker compose build develop
docker compose up -d --remove-orphans develop
- 使用远程容器在vscode中打开
2. 使用Composer
运行composer create-project 4apps/staticphp ./
以获取稳定版本,以及composer create-project 4apps/staticphp ./ master-dev
以获取github上的最新开发版本。Composer将为您安装所有依赖项。
Npm用于SCSS和JavaScript
安装node并运行npm install
* 记得设置缓存目录的正确权限。例如:chown www-data:www-data ./src/Application/Cache/
或chmod 777 ./src/Application/Cache/
运行项目的最快方式是使用php内置的服务器。要做到这一点,请切换到./somedir/src/Application/Public,并运行php -S 0.0.0.0:8081
。现在打开您的服务器_ip:8081(或127.0.0.1:8081),StaticPHP的第一个页面应该会出现。
或
运行npm start
默认情况下,使用php的cli服务器运行StaticPHP会打开调试,但您可以在./somedir/Applications/Config/Config.php中通过设置$config['environment']或$config['debug']变量来配置。
* 请查看./somedir/src/Application/Modules/Controllers/Welcome.php中的home控制器以及./somedir/src/Application/Modules/Views/中的视图,以了解基本框架的使用。
资产
所有资产都存储在./somedir/src/Application/Public/assets/目录中。StaticPHP使用npm处理CSS(使用SCSS)和js资产,但您也可以手动处理。
定时任务
从命令行运行控制器可以通过这种方式完成:php -f /srv/sites/gm.lv/sla/src/Application/Public/index.php -- --query /defaults/console/refresh
API
* 进行中
示例应用
一个简单的基于session的待办事项应用。要查看源代码,请检出"example"分支。
PHPUnit
要运行phpunit测试,请安装composer开发依赖项(composer install --dev
),然后运行./Vendor/bin/phpunit ./src/Application/
ApiGen API文档
要生成API文档,请安装composer开发依赖项(composer install --dev
),运行./Vendor/bin/apigen generate ./ --destination ./src/Application/Public/docs ./src
或npm run docs
,然后打开http://127.0.0.1:8081/docs/
基本的Nginx配置
server {
listen 80;
listen 443 ssl;
server_name staticphp.gm.lv;
root /www/sites/gm.lv/staticphp/src/Application/Public;
index index.php index.html index.htm;
# Error responses
error_page 403 /errors/E403.html;
error_page 404 405 =404 /errors/E404.html;
error_page 500 501 502 503 504 =500 /errors/E500.html;
# Handle error responses
location ~ /errors/(E[0-9]*.html) {
alias /www/sites/gm.lv/staticphp/System/Modules/Core/Views/Errors/$1;
}
# Base location
location / {
if (!-e $request_filename)
{
rewrite ^(.*)$ /index.php?/$1 last;
}
}
# Allow font origin (for webfonts and similar)
location ~* \.(eot|ttf|woff|svg)$ {
add_header Access-Control-Allow-Origin *;
}
# Set assets expiration headers to max
location ~ ^/assets/ {
expires max;
}
# Handle php files
location ~ \.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include /etc/nginx/fastcgi_params;
# To intercept errors from fastcgi and show our error pages instead, otherwise nginx will send to browser whatever response there was from fastcgi
fastcgi_intercept_errors on;
}
# Show 404 for hidden files
location ~ /\. {
return 404;
}
}
TODO和想法
- i18n和缓存类使用指南
- 缓存类:支持postgres、mysql和sql lite(谁知道呢,可能有人需要这个:))
- 编写使用指南
- 将所有会话类重写为一个,通过添加一个选项来选择要使用的会话后端,可能允许使用多个后端(例如,memcached -> sql)。
- 寻找一种从与扩展视图相同的目录扩展视图的方法。例如,{% extends "layout.html" %}而不是{% extends "Defaults/Views/layout.html" %}
历史
####v1.2.0
- 测试可能不再工作
- 更新待办事项示例应用
- √ 将异常放入自己的文件夹
- √ 对于Core\Models也使用完整命名空间。例如,现在
use \Core\Models\Router;
改为use \System\Modules\Core\Router;
- √ 更新URL结构,使其无需以斜杠结尾。现在在模板中您这样做:
{{ controller_url }}/test-page
而不是 -{{ controller_url }}test-page
。 - √ 使用类生成菜单、子菜单/侧边栏
- √ 表格展示类
- √ 更新服务器到PHP 8.1
- √ 更新页面布局到bootstrap 5
####v1.2.0
- √ 将docker移至主仓库。现在开发应使用docker远程进行。
- √ 将Application和System文件夹移入src
- √ 更新一切 - PHP 8.1、bootstrap、npm库。
- √ 删除冗余npm库。
- √ 删除jQuery
- √ 添加bump2version。
- √ 添加构建docker服务,创建静态PHP存档。
- √ 将资源移至自己的src目录 - 如果位于dist文件夹以外的其他父路径下,则更容易grep。
####v1.1.0
- √ 更新Twig
####v1.0.0
- √ 删除Help/Example页面描述 - 这基本上是apigen的作用。
- √ 重写Db类,使其在init方法中将$name参数放在$confi之前。
- √ 仅使用composer进行PHP相关操作。
- √ 使用npm脚本来设置SCSS。
- √ 使用npm脚本设置webpack用于js。
- √ 扩展核心类从通用到更具体的角色。
- √ 添加第一个PHPUnit测试。
- √ 各种错误修复。
- √ 允许控制器、助手和模型也从前面的Application文件夹加载,就像Config已经那样。
- √ 用新格式替换apigen配置文件。
####v0.9.5
- √ 缓存类:Redis、Memcached、APC和文件。
- √ i18n类具有twig集成(i18n::twigRegister(Load::$config['view_engine'])).
####v0.9.4
- √ 修复了不存在变量导致通知的问题。
- √ 更新nginx配置示例。
- √ 添加 .editorconfig 文件。
- √ 更新composer依赖。
- √ 一些微性能更新。
- √ 可选禁用twig模板引擎。
####v0.9.3
- √ 修复了阻止从子目录加载页面的问题。
####v0.9.2
- √ 修复了当从Routes.php配置文件加载默认路由时,$controller_url未设置的问题。
- √ 核心控制器渲染方法没有$data参数,已修复。
- √ siteUrl twig过滤器现在接受Router::siteUrl()的所有参数。
- √ 添加Router类的debug方法。
- √ 将Router的所有助手方法设置为公共。
- √ 重命名Router类的某些变量,使其更具意义,并添加了一些新变量。
- √ 更多Router修复以正确处理控制器。
####v0.9.1
- √ 更新文档配置
####v0.9
- √ 添加了各种小型助手函数,请参阅System/Modules/Core/Helpers/Other.php
- √ 重写了框架以实现更模块化的结构
- 链接如 - /module/my-controller/my-method 现在转换为 Application/Modules/Module/MyController.php::myMethod($params)
- √ PSR-0或PSR-4自动加载方案
- 所有文件夹名称和文件名称现在使用 StudlyCaps命名
- 我们不使用"Vendor"作为自动加载类的名称前缀,以避免长包含(例如"使用"参数),这可能对使用同一实例运行多个应用程序很有用,但暂时跳过。
- √ 添加核心控制器
- 如果使用,控制器现在可以访问self::$controller_url和self::$method_url,这对于迁移控制器到其他URL和控制器复制非常有用。
- self::render('path_to_view.html')将自动查找模块的Views目录
- self::write($params)如果$param是一个数组,则将echo json编码的字符串
- √ Json响应到目前为止已经被广泛使用,也许我们应该创建一种输出过滤方法,根据输出类型输出内容?
- 如果控制器方法返回一个数组,它会被转换为JSON编码的字符串并返回给浏览器
- √ 将助手放在命名空间下吗?
- 不,函数应该在全局作用域内
- √ 决定是否使用反射API。
- 是,使用反射API
- √ CSS和JavaScript压缩 - git钩子,还有CSS和JavaScript版本控制。
- 在Scripts下添加了minify.py,这也会生成JavaScript源映射
- 在默认视图中添加了与此相关的一切
- 添加了一个git pre-commit钩子,可以检查CSS或JavaScript文件是否已修改,并据此执行minify.py
- 添加了一个git post-receive钩子,可以检查CSS或JavaScript文件是否已修改,并据此通过调用wget的URL来增加CSS或JavaScript版本
- √ 脚本清除Twig缓存。也是一个git钩子吗?
- 添加了一个git post-receive脚本,可以检查是否有任何HTML文件被修改,如果是,则清除Twig缓存
####v0.8
- √ 数据库是否应该在beginTransaction .. commit .. rollback模式下运行所有查询?
- 现在不,默认情况下,我们以持久模式运行连接,这可能会导致事务问题。
- √ 更新当前使用StaticPHP的项目之一,以了解我们是否遗漏了在视图文件中全局可用的任何必需变量。
- √ 选择文档解析器。
- 目前使用apigen。
- √ 检查表单验证助手是否仍然正常工作以及它如何应用于Twig。
- 现在正常工作,可以通过运行 \models\fv::twig_register(); 将其注册到twig中
- √ Pages助手一旦加载,应该将自己与Twig注册,如果Twig可用。
- 不,分页HTML可以作为变量传递到视图中。
- √ 将所有include更改为require,这样我们就不会通过做一些不能做的事情暴露StaticPHP到任何安全问题。
- √ 更新StaticPHP起始页面。
- √ 将文件系统助手添加到核心\load类。
- √ 通过核心\load类实现日志接口。
- √ 检查核心路由类,确保没有冗余方法。
- √ 将所有类方法重命名为camelCase格式以符合php-fip标准。也可能包括文件名。
- √ 检查URL前缀是否工作。
- √ 检查before_controller钩子。