tischmann / atlantis
具有CMS功能的简单MVC框架
Requires
- php: >=8.2
- ext-curl: *
- ext-intl: *
- ext-json: *
- ext-mbstring: *
- ext-pdo_mysql: *
- ext-session: *
- ext-xml: *
- ext-zlib: *
This package is auto-updated.
Last update: 2024-09-22 04:24:40 UTC
README
Atlantis是一个简单且易于使用的MVC PHP框架。
它设计得易于使用和学习。
它还设计得易于扩展和配置。
这是一个适合初学者和专家的优秀框架。
系统要求
OS: Linux
PHP: 8.2+ (FPM)
MySQL: 8.0+ (推荐)
Nginx: 1.18.0+
文件系统结构
/.env — 环境变量文件
/.gitignore — Git排除文件
/README.md — 描述文件
/app — 应用程序目录
/app/Database — 数据库目录
/app/Controllers — 控制器目录
/app/Models — 模型目录
/app/Views — 视图目录
/bootstrap — 加载目录
/bootstrap/app.php — 应用程序加载文件
/bootstrap/config.php — 应用程序配置文件
/bootstrap/require.php — 应用程序依赖文件
/bootstap/routes.php — 应用程序路由文件
/src — 核心目录
/lang — 语言目录
/public — 公共文件目录
/public/index.php — 入口文件
/public/app.js — 主要JavaScript文件
/public/pwa.js — 进步式Web应用程序文件
/public/app.css — 主要CSS文件
/routes — 路由目录
/private.pem - 私钥
/public.pem - 公钥
配置
环境配置
APP_ID — 应用程序标识符(每个应用程序都是唯一的)
APP_TIMEZONE — 应用程序时区(默认UTC)
APP_COOKIE_PATH — 钩子路径(默认/)
APP_COOKIE_HTTP_ONLY — 钩子仅通过HTTP可用(默认1)
APP_USE_ONLY_COOKIES — 仅使用钩子(默认1)
APP_COOKIE_SECURE — 使用安全钩子(默认1)
APP_USE_STRICT_MODE — 使用严格模式(默认1)
APP_COOKIE_SAMESITE — 使用钩子严格模式(默认Strict)
APP_USE_TRANS_SID — 在钩子中使用SID(默认0)
APP_CACHE_LIMITER — 缓存限制器(默认nocache)
APP_SID_LENGTH — SID长度(默认128)
APP_HASH_FUNCTION — 哈希函数(默认sha256)
APP_LOCALE — 应用程序区域设置(ru, en, ...)
APP_TITLE — 应用程序标题
APP_DESCR — 应用程序描述
DB_TYPE — 数据库类型
DB_HOST — 数据库主机
DB_PORT — 数据库端口
DB_NAME — 数据库名称
DB_CHARSET — 数据库字符集
DB_USERNAME — 数据库用户名
DB_PASSWORD — 数据库密码
MEMCACHED_HOST — Memcached主机
MEMCACHED_PORT — Memcached端口
CSRF保护
为了防止CSRF攻击,使用特殊的令牌。
令牌在每次请求时生成并存储在会话中。
在表单中使用模板 {{csrf}} 生成令牌。
使用方法 {{csrf-token}} 输出CSRF令牌的值。
使用方法
csrf_verify();
作为参数传递请求对象。
方法不返回任何值,但如果令牌不匹配,则抛出异常。
验证令牌后,它们将从会话中删除。
路由
路由在文件 /bootstrap/routes.php 中执行。
在 /routes 目录中以 .php 扩展名的文件形式设置路由。
路由示例
Router::add( new Route( controller: new Controller(), path: 'path', action: 'action', method: 'GET' ) );
路由参数
在路由中传递的变量可以通过route属性在控制器中访问,该属性是Route类的实例。
示例
class SomeController extends Controller { public function someAction() { $args = $this->route->args(); } }
查询参数
查询参数在Request类的实例中在控制器中可用。
示例
class SomeController extends Controller { public function someAction() { $request = Request::instance(); $post = $request->post(); $get = $request->get(); $input = $request->input(); $headers = $request->headers(); $request = $request->request(); } }
视图模板化器
视图模板存储在/app/Views目录中,并具有.php扩展名。
模板结构
环境变量
要传递变量到模板,使用方法:{{env=VARIABLE_NAME}}。
变量注册有值。
示例
<title>{{env=APP_TITLE}}</title>
本地化
用于本地化的方法是:{{lang=key_name}}
示例
<h1>{{lang=hello_world}}</h1>
本地化存储在/locales目录中。
每个本地化存储在具有本地化名称和.php扩展名的单独文件中。
例如:/locales/ru.php - 俄语本地化。
本地化文件返回一个包含键和值的数组。
键转换为小写,并可能包含字符:a-z、0-9、_。
示例
<?php return [ 'hello_world' => 'Привет, мир!' ];
可能有多个本地化文件,它们将合并到一个数组中。
分页
用于显示分页的方法是:{{pagination}}
还需要传递一个名为pagination的变量到模板中,该变量包含Pagination类的实例。
变量
用于输出字符串变量的方法是:{{var_name}}。
所有变量必须在声明视图时传递到模板。
示例
new Template( 'template_name', [ 'var_name' => 'Привет, мир!', ] );
数据库
表结构
表结构存储在/app/Database目录中。
该目录包含具有表名称和.php扩展名的文件。
创建
用于创建表的命令是
./migrate create
删除
用于删除所有表的命令是
./migrate remove
填充
用于填充表数据的命令是
./migrate seed