ophelios/zephyrus

简单的PHP框架

0.7.0 2024-08-21 22:17 UTC

This package is auto-updated.

Last update: 2024-09-23 17:32:51 UTC


README

优雅、简单、轻量、愉快且灵活的PHP框架

Maintainability Test Coverage codecov Build Status StyleCI GitHub issues GitHub release

哲学

欢迎来到Zephyrus框架!这个框架基于教学模型,以简单的MVC结构为导向,采用灵活的编程方法,为各种类型的项目提供可扩展性,高度重视应用程序的安全性,以及开发自由。所有这些都在一个优雅的面向对象核心中提供,有利于编写高质量、易于维护的代码。开发时,我们遵循一个保持编程乐趣的哲学,不过分严格于固定使用方式,即所有内容都必须通过配置进行限制。Zephyrus位于最小框架和大型框架之间,以满足大多数项目的需求。

一些通用特性

  • 基于MVC架构的简单直观的项目结构
  • 使用原生HTML预处理器Pug或简单PHP原生进行视图处理。
  • 采用教学方法设计优雅的类,并促进与PHP原生功能(如使用超级全局变量、会话等)的向后兼容性。
  • 简单灵活的基于控制器的请求路由器,包括在请求流程和控制流中轻松集成中间件,便于责任划分和执行链路阅读。
  • 集成多个内置安全机制,如CSP头、CSRF令牌、XSS保护、基于项目的入侵检测(PHPIDS)、授权机制等。
  • 从手动定义的代理处访问数据的哲学,提供对构建SQL查询的完全控制,从而简化维护和优化。
  • 简单的方法集成搜索、排序和分页功能到手动请求。
  • 优雅且易于扩展的表单验证系统,提供大量内置规则,包括数字、字符串、上传文件、日期等。
  • 针对从JSON结构管理字符串的简单且优化过的引擎,易于组织以提供国际化。
  • 快速灵活的项目配置,允许使用自定义参数轻松使用。
  • 通过与Composer模块的兼容性,易于高度扩展。
  • 提供多个快速工具:加密、验证、文件系统、错误管理、消息传输等。
  • 还有更多!

安装

Zephyrus需要PHP 8.2或更高版本。目前仅支持Apache作为Web服务器(对于其他类型的Web服务器,只需适配.htaccess文件即可)。还需要Composer依赖管理器。安装后的结构包含多个示例,以方便初次使用。

选项1:通过Composer安装(推荐)

$ composer create-project zephyrus/framework <PROJECT_NAME>

选项2:从存档安装

$ mkdir <PROJECT_NAME>
$ cd <PROJECT_NAME>
$ wget https://github.com/dadajuice/zephyrus-framework/archive/vx.y.z.tar.gz
$ tar -xvf vx.y.z.tar.gz --strip 1
$ composer install

选项3:从源代码安装(例如,为提交PR而使用开发版本)

$ git clone https://github.com/dadajuice/zephyrus-framework.git
$ composer install  

与Apache的集成

项目安装完成后,只需在vhost中添加一个指向项目/public目录的条目。

<VirtualHost *:80>
        ServerName <HOST or IP>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/<PROJECT_NAME>/public        
        <Directory /var/www/>
                AllowOverride All
                Require all granted
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

使用

示例 1:从数据库获取列表和详情(简单)

app/Models/Brokers/ClientBroker.php

<?php namespace Models\Brokers;

class ClientBroker extends Broker
{
    public function findAll(): array
    {
        return $this->select("SELECT * FROM client");
    }

    public function findById($clientId): ?\stdClass
    {
        return $this->selectSingle("SELECT * FROM client WHERE client_id = ?", [$clientId]);
    }
}

app/Controllers/ExampleBroker.php

<?php namespace Controllers;

use Models\Brokers\ClientBroker;use Zephyrus\Network\Router\Get;

class ExampleController extends Controller
{
    #[Get("/clients")]
    public function index()
    {
        $broker = new ClientBroker();       
        return $this->json(['clients' => $broker->findAll()]);
    }

    #[Get("/clients/{id}")]
    public function read($clientId)
    {
        $broker = new ClientBroker();
        $client = $broker->findById($clientId);
        if (is_null($client)) {
            return $this->abortNotFound();  
        }
        return $this->json(['client' => $client]);
    }
}

示例 2:处理带有验证的插入

<?php namespace Controllers;

use Models\Brokers\UserBroker;
use Zephyrus\Application\Rule;use Zephyrus\Network\Router\Post;

class ExampleController extends Controller
{
    #[Post("/users")]
    public function insert()
    {
        // Construire un objet Form depuis les données de la requête
        $form = $this->buildForm();
    
        // Appliquer une série de règles de validation sur les champs nécessaires. Il existe une grande quantité
        // de validations intégrées dans Zephyrus. Consulter les Rule:: pour les découvrir.
        $form->field('firstname', [Rule::required("Firstname must not be empty")]);
        $form->field('lastname', [Rule::required("Lastname must not be empty")]);
        $form->field('birthdate', [Rule::date("Date is invalid")]);
        $form->field('email', [
            Rule::required("Email must not be empty"),
            Rule::email("Email is invalid")
        ]);
        $form->field('password', [Rule::passwordCompliant("Password does not meet security requirements")]);
        $form->field('password_confirm', [Rule::sameAs("password", "Password doesn't match")]);
        $form->field('username', [
            Rule::required("Username must not be empty"),
            new Rule(function ($value) {
                return $value != "admin";
            }, "Username must not be admin!")
        ]);        

        // Si la vérification échoue, retourner les messages d'erreur avec leur champs
        if (!$form->verify()) {            
            return $this->json($form->getErrors());
        }

        // Effectuer le traitement si aucune erreur n'est détectée (dans ce cas, ajouter l'utilisateur depuis
        // un courtier et obtenir le nouvel identifiant).
        $clientId = (new UserBroker())->insert($form->buildObject());

        // Retourner au client l'identifiant du nouvel utilisateur
        return $this->json(['client_id' => $clientId]);
    }
}

贡献

感谢 ❤️

  • 索雷尔-特雷西学院信息技术专业的学生以及 Onirique 的员工,感谢他们的支持和改进建议。
  • 感谢 PHPIDS 的作者,因为他们允许我们将他们的代码的一部分包含在内,以设计入侵检测模块。

安全

如果您发现任何可能影响使用此框架创建的应用程序安全的问题,请私下联系。

错误和功能

要报告错误,请求添加新功能或提出建议,请使用 GitHub 的 问题管理工具

开发

您可以通过提交 PRs 来为 Zephyrus 的开发做出贡献。

许可证

MIT (c) David Tucker