tischmann/atlantis

具有CMS功能的简单MVC框架

安装: 1

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:框架

dev-master 2024-05-22 03:41 UTC

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