4apps/staticphp

轻量级的PHP框架

安装: 71

依赖项: 0

建议者: 0

安全性: 0

星标: 26

关注者: 5

分支: 2

开放问题: 19

类型:项目


README

apidocs packagist

logo

StaticPHP

简单、模块化的PHP框架。 README.md需要更新。

要求

  • PHP 8.1+
  • Twig 3.0+

安装

有两种方法开始使用StaticPHP框架

  1. Docker <- 建议使用
  2. Composer

1. 使用Docker

  1. docker compose build develop
  2. docker compose up -d --remove-orphans develop
  3. 使用远程容器在vscode中打开

2. 使用Composer

运行composer create-project 4apps/staticphp ./以获取稳定版本,以及composer create-project 4apps/staticphp ./ master-dev以获取github上的最新开发版本。Composer将为您安装所有依赖项。

如何安装Composer?

Npm用于SCSS和JavaScript

安装node并运行npm install

如何安装node?

* 记得设置缓存目录的正确权限。例如: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

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 ./srcnpm 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钩子。